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人可能会争辩说,开放的细节活动和宣传甚至应该是分开的,但我想知道如果有人有更好的实施/建议。