Pagination while scrolling recycler view to the to

2019-04-11 21:09发布

问题:

I have a requirement for implementing pagination while scrolling up a RecyclerView. I am facing some issues as while adding content to the 0th position and notifying the adapter, recyclerview automatically scrolls to the top. Is there a way to disable that behaviour?

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

Where setFields(viewHolder, data);method sets values to different fields.

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

The above code is for calling web service when the position of the recycler view reaches 0 (pagination).

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

The above is the method for loading the data got from web service to the adapter.

Thank you so much in advance.

回答1:

Code inside adapter.Please note that granular updates is better than calling notifydataset changed.Reference

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

the code to add items when the list is reaches the zero position

 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();
        }
    });

Code to add items

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);
}

for complete reference.Refer this