情况:收到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 ??;
}
任何帮助将不胜感激。
您的与此问题The correct way to obtain a ViewModel instance outside of an Activity or a Fragment相似的问题
您不应该在非活动/片段类中实例化视图模型。对于您的情况,当onReceive触发时,您应该“通知”活动/片段,然后对该活动/片段进行操作。因此,应在您的活动/片段上实例化viewmodel。