目錄介紹
實例化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");
}
12345
介紹
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<>();
1
3.2 設置新數據
isCreateNew.setValue(true);
1
3.3 監測數據變化
LifecycleOwner owner = (LifecycleOwner) getContext();
viewModel.isCreateNew.observe(owner, new Observer<Boolean>() {
@Override
public void onChanged(Boolean createNew) {
if (createNew) {
//TODO 相應界面變化
} else {
//TODO 相應界面變化
}
}
});
1234567891011
3.4 獲取當前數據內容
boolean createNew = viewModel.isCreateNew.getValue();
1
————————————————
版權聲明:本文爲CSDN博主「Minla」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012551120/article/details/105864884