Плавная прокрутка до позиции без загрузки всех элементов каждый раз - PullRequest
2 голосов
/ 31 марта 2019

Я создаю приложение для обмена фотографиями с фидом, похожим на Instagram. Основной фрагмент канала состоит из двух различных каналов в пейджере представления (недавний и последующий), а затем есть два других фрагмента на том же уровне, что и основной фрагмент канала (профиль и настройки).

Я бы хотел, чтобы оба состояния канала сохранялись при навигации по приложению. В настоящее время, если вы проведете пальцем между двумя каналами в пейджере просмотра, их состояние будет сохранено в текущей позиции, но при переходе к профилю или настройкам канал вернется к началу при возврате.

Я могу сохранить последний элемент на обоих, используя модель общего представления (я нашел, что это самый простой способ). Моя проблема заключается в прокрутке обратно в положение при возврате. Сначала я просто попробовал простой прокрутку до позиции, но это не сработало, и я считаю, что это потому, что я пытался вызвать ее до того, как переработчик был заполнен.

Что меня интересует, так это то, есть ли способ сохранить заполненный утилизатор при переходе к другим фрагментам? Я беспокоюсь о потреблении данных моего приложения. Если мне понадобится заполнить сотни уже прокрученных фотографий в двух разных каналах, каждый раз, когда пользователь переключается между фрагментами, это отнимает у пользователя много данных.

Буду признателен за любые советы и идеи, спасибо.

1 Ответ

0 голосов
/ 31 марта 2019

Есть два пути. Одним из них является то, что вы можете сохранить заполненный вид рециркулятора даже после перехода к другим фрагментам. Вы можете сделать это, установив ограничение экрана на вашем ViewPager. Параметр Limit - это число страниц, которые должны быть сохранены по обе стороны от текущей страницы в иерархии представления в состоянии ожидания.

ViewPager.setOffscreenPageLimit(3) // in this case 3 fragments on either side of the current page will be retained.

Как вы сказали, это может занять много памяти.

Другим способом является размещение кода прокрутки в главном потоке, чтобы у вашего представления переработчика было достаточно времени для инициализации и заполнения элементов.

Выполните следующие действия после того, как вы установили данные в своем адаптере вида переработчика

recyclerView.post(new Runnable() {
    @Override
    public void run() {
        // Call your scrolling code  
        recyclerView.smoothScrollToPosition(adapter.getItemCount() - 1);                                 
    }
});
...