提问者:小点点

androidViewModel循环视图滚动跳转模型更新(MVVM)


我有一个非常具体的问题与回收视图mvvm实现。

当我在回收器视图中选择一个ListItem时,单击将被给予我的viewmodel类,它将应用ListItem上的“isselect”标志以及由回收器视图(间接)观察的MutableLiveData类。这会导致主活动中的观察者更新整个列表

结果是,每当我在回收器视图中选择一个项目时,回收器视图都会向上滚动,(大概)因为整个列表都被更新了,它将更新后的列表视为一个全新的列表。

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

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


共1个答案

匿名用户

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

这个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);