目录
实例化ViewModel判断
try {
graffitiViewModel = ViewModelProviders.of((FragmentActivity) getContext()).get(GraffitiCanvasModel.class);graffitiViewModel.createGraffitiSaveDialog(getContext());
} catch (ClassCastException exception) {
throw new ClassCastException("Please ensure that the provided Context is a valid FragmentActivity");
}
介绍
-
AndroidViewModel
实际使用时总是和MutableLiveData
结合使用,大部分使用都是在FragmentActivity
或者Fragment
中,但是千万不要认为它只能在它们里面使用。 -
当你有一个
复杂的自定义View
或者有一组某个模块的自定义View
,可以为其单独添加一个AndroidViewModel
来进行对数据的管理。这里推荐一个mapbox
的一个官方项目来学习,github链接: https://github.com/mapbox/mapbox-navigation-android,其中的自定义ViewNavigationView.java
和它的ViewModelNavigationViewModel.java
就是很好的例子。 -
当你改变数据想刷新界面时,你只需要利用
AndroidViewModel
获取到其中的MutableLiveData
对象,再利用它的setValue()
方法修改数据即可,只要你对它进行observe()
方法的观察,原理类似于RXJava
中Observable
的观察。当然你不需要观察,只想在某个时机拿到里面的值来判断,用getValue()
方法即可。
3.1 实例
MutableLiveData
public final MutableLiveData<Boolean> isCreateNew = new MutableLiveData<>();
3.2 设置新数据
isCreateNew.setValue(true);
3.3 监测数据变化
LifecycleOwner owner = (LifecycleOwner) getContext();
viewModel.isCreateNew.observe(owner, new Observer<Boolean>() {
@Override
public void onChanged(Boolean createNew) {
if (createNew) {
//TODO 相应界面变化
} else {
//TODO 相应界面变化
}
}
});
3.4 获取当前数据内容
boolean createNew = viewModel.isCreateNew.getValue();