RecyclerView刷新数据后焦点位置不变

RecyclerView调用notifyDataSetChanged方法刷新数据后焦点恢复原来的位置

步骤如下:

(1)adapter执行setHasStableIds(true)方法

mListAdapter.setHasStableIds(true);

注意:setHasStableIds需要在setAdapter之前设置,否则报错:java.lang.IllegalStateException: Cannot change whether this adapter has stable IDs while the adapter has registered observers.

(2)RecyclerView的动画必须去掉

mListView.setItemAnimator(null);
1

(3)重写adapter的getItemId()方法,让每个view都有各自的id

@Override
public long getItemId(int position) {
return position;
}
2
0