分页滚动回收器视图到顶部

时间:2016-09-18 14:26:58

标签: android pagination android-recyclerview recycler-adapter

我需要在向上滚动RecyclerView时实现分页。我正面临一些问题,因为在向第0个位置添加内容并通知适配器时,recyclerview会自动滚动到顶部。有没有办法禁用这种行为?

        @Override
        public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
            setFields(viewHolder, data);
            if (position == 0 && getParentFragment().hasPrevious()) {
                getParentFragment().callPreviousPage();
            }
        }

setFields(viewHolder, data);方法将值设置为不同的字段。

if (position == 0 && getParentFragment().hasPrevious()) {
   getParentFragment().callPreviousPage();
}

以上代码用于在回收站视图的位置达到0(分页)时调用Web服务。

public synchronized void setList(final List<TournamentsData> list) {
    this.list.addAll(0, list);
    notifyDataSetChanged();
}

以上是将从Web服务获取的数据加载到适配器的方法。

提前非常感谢你。

1 个答案:

答案 0 :(得分:6)

适配器内的代码。请注意,粒度更新比调用notifydataset更改更好。Reference

public void addlisttop(List<MyInformationClass> list)
     {
        for(int i=0;i<list.size();i++)
        {
            myinformation.add(i,list.get(i));
            notifyItemInserted(i);
        }
    }  

当列表到达零位置时添加项目的代码

 myRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            int itemno=myLayoutManager.findFirstVisibleItemPosition();
            if(itemno==0)additems();
        }
    });

添加项目的代码

private void additems()
{
    MyInformationClass myInformationClass=new MyInformationClass();
    List<MyInformationClass> list=new ArrayList<>(10);
    for(int i=0;i<10;i++)
    {
        myInformationClass=new MyInformationClass();
        myInformationClass.maintext="BulkListItem"+ String.valueOf(number);
        myInformationClass.subtext="subtext";
        list.add(myInformationClass);
        number=number+1;
    }
    myRecycleAdapter.addlisttop(list);
}

完整参考。请参阅this