2

У меня есть требование для реализации разбиения на страницы при прокрутке RecyclerView. Я столкнулся с некоторыми проблемами, так как добавляя контент в 0-ю позицию и уведомляя адаптер, recyclerview автоматически прокручивается вверх. Есть ли способ отключить это поведение?Pagination while scrolling recycler view to top

 @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 (разбиение на страницы).

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

Вышеупомянутый способ загрузки данных, полученных из веб-службы, в адаптер.

Большое вам спасибо.

+0

Проверьте это out http://www.gadgetsaint.com/android/recyclerview-header-footer-pagination/ – ASP

ответ

3

Код внутри адаптера. Обратите внимание, что подробные обновления лучше, чем изменение имени 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); 
} 

для полного reference.Refer this