Хобрук: Ваш путь к мастерству в программировании

Viewpager Ленивая загрузка данных

ViewPager имеет общедоступную функцию setOffscreenPageLimit (http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)), что это такое? Вот описание из документа:

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

Как насчет моего демо

Теперь моя демонстрация содержит пейджер с 6 фрагментами. Когда он запускается, пейджер загружает первый пейджер и второй пейджер, но на экране отображается только первый пейджер. Когда мы перейдем ко второму пейджеру, он будет загрузить третий пейджер. Все это легко понять.

показать ситуацию с первой загрузкой пейджера

Из рисунка мы можем узнать, что пейджер 2 был загружен, когда приложение показывает пейджер 1, поэтому мы можем переместить пейджер на пейджер 2, и нам не нужно снова загружать данные на пейджер 2.

Когда я переведу его на пейджер 3, пейджер 1 перейдет в состояние остановки, а пейджер 4 будет загружаться.

пейджер1 -> пейджер2 -> пейджер3 -> пейджер4

остановить -> возобновить, но не показывать -> возобновить и показать -> возобновить, но не показывать

Вот картинка, чтобы показать, что произошло выше!

pager3 в статусе отображения, pager1 в состоянии остановки и pager2, pager4 в возобновлении, но не отображается

Что мне нужно, чтобы мое приложение делало!

Я просто хочу, чтобы пейджер загружал данные, которые сейчас показывает пейджер. Например, при первом запуске приложения он только запускает пейджер1 и загружает то, что нужно данным на пейджере1. Pager2 не загружает данные.

Вот моя демонстрация: https://github.com/shellshy/LazyViewPager

17.10.2013

Ответы:


1

Именно так.

public class FragmentSample extends Fragment{
    ...  
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
           // load you data
        }
    }
    ...
}
23.03.2016

2

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

17.10.2013

3

Отложенная загрузка данных для элементов ViewPager

возможно, вы можете увидеть мой ответ, который использует setUserVisibleHint() для клиента фрагмента

22.09.2015
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..