Как предотвратить загрузку всех данных фрагментов сразу с помощью TabLayout

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

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

viewpager.offscreenPageLimit = mTaskStatusListResult.size

После исследования я нашел https://stackoverflow.com/a/39455160/9635628 и установил viewpager.offscreenPageLimit = 1 Но, тем не менее, вторая вкладка данные загружаются. т.е. когда пользователь входит на экран, он загружает первые и вторые данные, а при нажатии на вторую вкладку загружает третьи данные. Я хочу предотвратить это. Можете ли вы помочь. Это будет оценено.


person Komal    schedule 23.01.2020    source источник
comment
У меня была такая же проблема некоторое время назад, и я не мог найти способ, способ загрузки только текущего фрагмента должен быть offscreenPageLimit = 0, но когда я проверил его, я обнаружил, что offscreenPageLimit внутренне ведет себя так, как будто он был 1, даже если вы установите его на 0 .   -  person jeprubio    schedule 23.01.2020
comment
Я думаю, вам следует установить offscreenPageLimit равным нулю, но вы также получите тот же эффект. Прочтите этот вопрос   -  person art    schedule 23.01.2020


Ответы (2)


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

ViewPager.setOffscreenPageLimit(1)

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

открытый класс MyFragment расширяет фрагмент

{

@Override

public void setMenuVisibility (последнее логическое видимое значение)

{

super.setMenuVisibility (видимый);

    if (visible) {
        // ...
    }

}

// ... }

person Kanzariya Hardik    schedule 23.01.2020
comment
вы можете попробовать метод видимого фрагмента - person Kanzariya Hardik; 23.01.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 для загрузки данных.

person Abid Khan    schedule 23.01.2020
comment
setUserVisibleHint устарел - person androidXP; 25.04.2020
comment
setUserVisibleHint устарела. Я использовал функцию переопределения setMenuVisibility , и она сработала. - person Ahmed Elsayed; 30.11.2020