Activity与Fragment用同一个ViewModel¶
更新日期 2022-5-17
- 2022-5-17 增加参考
- 2021-6-26 创建文档
它们用的vm是同一个对象。Activity与Fragment中都用ViewModelProvider来提供ViewModel对象。
能用同一个vm,我们就可以方便的实现Activity与Fragment通信和Fragment之间的通信。
ViewModel¶
定义AnimCollectVm
public class AnimCollectVm extends AndroidViewModel {
public AnimCollectVm(@NonNull Application application) {
super(application);
}
// 其他方法...
}
Activity¶
在onCreate
方法中,调用new ViewModelProvider(this).get(AnimCollectVm.class)
获取对象mAnimVm
public class AnimCollectAct extends AppCompatActivity {
private AnimCollectActBinding mBinding;
private AnimCollectVm mAnimVm;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = DataBindingUtil.setContentView(this, R.layout.anim_collect_act);
mAnimVm = new ViewModelProvider(this).get(AnimCollectVm.class);
mBinding.setVm(mAnimVm);
// ...
}
Fragment¶
在onCreate
方法中,用new ViewModelProvider(getActivity()).get(AnimCollectVm.class)
获取对象mAnimVm
public class AbsAniFrag extends Fragment {
protected AnimCollectVm mAnimVm;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAnimVm = new ViewModelProvider(getActivity()).get(AnimCollectVm.class);
Log.d(TAG, "onCreate: frag vm-" + mAnimVm.hashCode());
// ...
}
}
运行验证¶
Activity与Fragment获取到的是同一个vm对象。 如果有多个Fragment,也可以拿到同一个对象。
参考¶
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~