Как правило, мы можем использовать следующий код, чтобы перейти к нижней части, если все данные были загружены в память.
recyclerView.scrollToPosition(YourArraylist.size()-1);
Но при использовании PagedListAdater и Room сущность последнего элемента вообще не загружалась.Поэтому при вызове recyclerView.scrollToPosition
я могу прокручиваться с помощью полосы прокрутки, но данные не отображаются.На моем экране я увидел несколько слов вроде «ABV ..»;и если я прокручиваю вверх / вниз вручную, эти представления могут отображаться правильно.
Кстати, я также пробовал ((LinearLayoutManager)recyclerView.getLayoutManager()).scrollToPositionWithOffset(index,0);
, это тоже не работает.
Связанный кодкак показано ниже,
DataSource.Factory<Integer, ContactWithSectionView> dsFactory = contactDao.listAll();
concertList = new LivePagedListBuilder<>(dsFactory, 5)
.build();
concertList.observe((LifecycleOwner)context,(pagedList) -> {
this.adapter.submitList(pagedList);
});
@Dao
public interface ContactDao {
@Query("select * from ContactWithSectionView")
DataSource.Factory<Integer, ContactWithSectionView> listAll();
}
Я пытался вызвать concertList.getValue().loadAround(index)
для загрузки данных перед вызовом recyclerView.scrollToPosition(int)
, но это тоже не сработало.- index - это позиция, в которую я хочу перейти.
Наконец, я сдался.не использовал PagedListAdapter + Room и загружал все элементы в память за один раз.