0
閱讀Google docs我發現(有點)使用selectedItem
爲了向其他觀察者傳播正在觸發的事件的示例,這是我當前的實現:MVVM // ViewModel事件正在觸發活動循環(已創建)
視圖模型
public void onListItemClicked(Item item) {
if (selectedItem.getValue() == item) {
return;
}
selectedItem.postValue(item);
}
public LiveData<Item> getSelectedItem() {
if (selectedItem == null) {
selectedItem = new MutableLiveData<>();
}
return selectedItem;
}
查看
ListViewModel viewModel = ViewModelProviders.of(this).get(ListViewModel.class);
viewModel.getSelectedItem().observe(this, new Observer<Item>() {
@Override
public void onChanged(@Nullable Item item) {
if (item != null) {
openDetailActivity(item);
}
}
});
當用戶點擊列表:
@Override
public void onItemClicked(Item item) {
viewModel.onListItemClicked(item);
}
所有好和所有它的工作原理,當用戶旋轉屏幕和ListActivity
重新產生的問題是檢測到變化,訂閱時將打開DetailActivity
。
我發現了一個解決方法,在getSelectedItem()
上增加了selectedItem.postValue(null);
,但它有點冒險。
Ofc人可能會爭辯說,開放的細節活動和宣傳甚至應該是分開的,但我想知道如果有人有更好的實施/建議。