情况:
收到SMS时,MyReceiver
类将提取SMS,然后应使用ViewModel
对象将数据插入数据库。
该文档着重于扩展AppCompatActivity
的类的实例化,但是是否有必要将现有活动的所有权传递给ViewModelProvider
构造函数?
问题: 从公共类(而非活动)访问ViewModel对象。
public class MyReceiver extends BroadcastReceiver{
public void onReceive(Context context, Intent intent){
mMyViewModel = new ViewModelProvider(??).get(MyViewModel.class);
}
}
尝试的解决方案:
为了将this
传递给ViewModelProvider
构造函数,我尝试使MyReceiver
实现androidx.lifecycle.ViewModelStoreOwner
。这需要覆盖方法getViewModelStore
。但是我不明白什么是ViewModelStore或如何创建它来返回ViewModel。
@NonNull
@Override
public ViewModelStore getViewModelStore(){
return ??;
}
任何帮助将不胜感激。
答案 0 :(得分:0)
您与此问题类似的问题The correct way to obtain a ViewModel instance outside of an Activity or a Fragment
您不应在非活动/片段类中实例化视图模型。对于您的情况,当onReceive触发时,您应该“通知”活动/片段,然后对该活动/片段进行操作。因此,应在您的活动/片段上实例化viewmodel。