提问者:小点点

回收站视图通知fyDataSetChanged滚动到顶部位置


当在RecyclerView上调用nonofyDataSetChanged时,它不会保留滚动位置并滚动到顶部,有什么解决方案可以保留它的滚动位置吗?


共3个答案

匿名用户

如果您的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;
    }
    

    相关问题