Как предотвратить загрузку всех фрагментов данных одновременно с помощью TabLayout - PullRequest
0 голосов
/ 23 января 2020

Я реализовал android .support.design.widget.TabLayout в моем приложении. Вкладка содержит данные Dynami c, полученные из API, а также содержимое Dynami c во фрагменте. Я называю API-интерфейсы Tab. Но в моем фрагменте все API, вызывающие первый фрагмент. Таким образом, для отображения данных требуется слишком большая нагрузка. Я хочу назвать API конкретной вкладкой. Когда пользователь нажимает на вкладку, должен вызываться API.

Я установил размер ArrayList на offscreenPageLimit, как показано ниже

viewpager.offscreenPageLimit = mTaskStatusListResult.size

После исследования я нашел { ссылка } и установить viewpager.offscreenPageLimit = 1 Но, тем не менее, данные второй вкладки загружаются. т.е. когда пользователь выходит на экран, он загружает первые и вторые данные при нажатии на вторую вкладку загружает третьи данные. Я хочу предотвратить это. Можете ли вы помочь. Это будет оценено.

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Одна вещь, которую вы можете сделать, находится внутри Fragment's setUserVisibleHint переопределенного метода

private boolean isViewShown = false;

    @Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
         super.setUserVisibleHint(isVisibleToUser);      
    if (getView() != null && isVisibleToUser) { 
         isViewShown = true; 
         callAPI(); 
    } else { 
         isViewShown = false; 
    } 
}

Этот метод вызывается, когда этот фрагмент виден только здесь, и здесь вы можете вызвать необходимый API для загрузки данных.

0 голосов
/ 23 января 2020

Viewpager имеет свойство по умолчанию для инициализации двух страниц одновременно, поэтому вы не можете изменить это, но вы можете установитьOffscreenPageLimit по своему усмотрению

ViewPager.setOffscreenPageLimit (1)

, если оно не работает Вы можете попробовать другой способ вызова API в Fragment видимым методом

publi c Класс MyFragment расширяет Fragment

{

@ Override

publi c void setMenuVisibility (видимое окончательное логическое значение)

{

super.setMenuVisibility (видимое);

    if (visible) {
        // ...
    }

}

// ...}

...