0

我对 recyclerview + mvvm 实现有一个非常具体的问题。

当我ListItem在recyclerview 中选择a 时,点击我的viewmodel 类,该类将“isselected”标志应用于recyclerview (间接)观察到ListItem的类。MutableLiveData这会导致 mainactivity 中的观察者更新List<ListItem>由 recyclerview 显示的整体。

结果是,每当我在 recyclerview 中选择一个项目时,recyclerview 都会向上滚动,(可能)因为整个列表都已更新,并且它将更新后的列表视为一个全新的列表。

如何在干净的代码中调整这种行为,最好是 mvvm 模式。

(也许是记录点击位置的解决方案,如果该位置存在,新列表会立即“滚动”到该位置。但如果可能的话,我不知道如何实现。)

4

1 回答 1

1

原来这是一个很常见的问题,但我用谷歌搜索的措辞误导了我。

这个stackoverflow答案解决了我的问题:

刷新 RecyclerView 中的数据并保持其滚动位置

//add a Parcelable field to save the state
private Parcelable recyclerViewState;

//before updating the adapter with live data
recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();

//after updating the adapter with live data
recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);
于 2018-04-01T07:50:44.733 回答