当在RecyclerView
上调用nonofyDataSetChanged
时,它不会保留滚动位置并滚动到顶部,有什么解决方案可以保留它的滚动位置吗?
如果您的RecyClerView列表项父级具有“wrap_content”属性,RecyClerView会再次计算高度并滚动顶部。
有两种解决方案:
>
layout_height="100dp"
像这样使用StaggeredGridLayoutManager:
mRecyserView. setLayoutManager(新的StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTIC));
第二种解决方案更有效,我建议这样做
不确定这是否解决了您的问题,但我遇到了同样的问题,这是因为我在通知后调用了setAdapter。所以,在通知后不调用setAdapter解决了问题。
mAdapter.notifyItemRangeInserted(mAdapter.getItemCount(), list.size() - 1);
recyclerView.setAdapter(); // remove this line.
//Do this only when you're setting the data for the first time or when adapter is null.
正如我所猜测的,您正在做的是将适配器重置为RecyclerView
,然后调用通知fyDataSetChanged()。
您只需要将dataList
传递给适配器,方法是在适配器方法中传递dataList
,例如适配器update(dataList)
。在这种方法中,您可以将此列表分配给适配器列表,例如;
public void update(ArrayList<Hashmap<String,String> list){
this.mList = list;
}