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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章