我有一个非常具体的问题与回收视图mvvm实现。
当我在回收器视图中选择一个ListItem
时,单击将被给予我的viewmodel类,它将应用ListItem
上的“isselect”标志以及由回收器视图(间接)观察的MutableLiveData
类。这会导致主活动中的观察者更新整个列表
结果是,每当我在回收器视图中选择一个项目时,回收器视图都会向上滚动,(大概)因为整个列表都被更新了,它将更新后的列表视为一个全新的列表。
如何在干净的代码中调整这种行为,最好是mvvm模式。
(也许是一种解决方案,其中记录了点击的位置,如果位置存在,新列表会立即“滚动”到这个位置。但我不知道如何实现这一点,如果可能的话。)
原来这是一个很常见的问题,但我在谷歌上的搜索措辞误导了我。
这个stackoverflow答案解决了我的问题:
刷新数据并保持其滚动位置
//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);