Ответ 1
Существует несколько способов сделать это, но одним из способов было бы использовать метод адаптера onBindViewHolder
:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == mData.length - 1) {
// load more data here.
}
/// binding logic
}
Когда метод связывания вызывается с последней позицией вашего источника данных, это хороший признак того, что последняя ячейка будет отображаться, и хорошее время для запуска вызова перезагрузки. Возможно, вам придется добавить дополнительные условия в состояние, чтобы убедиться, что вы еще не загружаете больше данных, но это должно помочь вам начать работу.
Другим вариантом будет редактирование вашего LayoutManager
. Идея здесь состоит в том, чтобы найти позицию последнего видимого элемента. Если эта позиция равна последнему элементу вашего набора данных, вы должны вызвать перезагрузку. Этот вызов должен выполняться в ваших методах LayourManager's
onLayoutChildren
и scrollVerticallyBy
(при использовании методов вертикальной прокрутки):
@Override
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
final int result = super.scrollVerticallyBy(dy, recycler, state);
if (findLastVisibleItemPosition() == mData.length - 1) {
loadMoreData();
}
return result;
}
@Override
public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
super.onLayoutChildren(recycler, state);
if (findLastVisibleItemPosition() == mData.length - 1) {
loadMoreData();
}
}
Как и раньше, вам необходимо убедиться, что вы не запускаете загрузку данных более одного раза, так как это возможно, это условие будет происходить более одного раза.
Надеюсь, это поможет!