AndroidViewModel

目录

  • 介绍

实例化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");
}

介绍

  1. AndroidViewModel实际使用时总是和MutableLiveData结合使用,大部分使用都是在FragmentActivity或者Fragment中,但是千万不要认为它只能在它们里面使用。

  2. 当你有一个复杂的自定义View或者有一组某个模块的自定义View,可以为其单独添加一个AndroidViewModel来进行对数据的管理。这里推荐一个mapbox的一个官方项目来学习,github链接: https://github.com/mapbox/mapbox-navigation-android,其中的自定义ViewNavigationView.java和它的ViewModelNavigationViewModel.java就是很好的例子。

  3. 当你改变数据想刷新界面时,你只需要利用AndroidViewModel获取到其中的MutableLiveData对象,再利用它的setValue()方法修改数据即可,只要你对它进行observe()方法的观察,原理类似于RXJavaObservable的观察。当然你不需要观察,只想在某个时机拿到里面的值来判断,用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();

你可能感兴趣的:(android)