从类实例化ViewModel

时间:2020-04-01 08:43:08

标签: java android viewmodel android-viewmodel

情况: 收到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 ??; 
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您与此问题类似的问题The correct way to obtain a ViewModel instance outside of an Activity or a Fragment

您不应在非活动/片段类中实例化视图模型。对于您的情况,当onReceive触发时,您应该“通知”活动/片段,然后对该活动/片段进行操作。因此,应在您的活动/片段上实例化viewmodel。