Обновить вкладку из другой вкладки - PullRequest
0 голосов
/ 09 октября 2018

У меня есть Activity, которая содержит ViewPager с четырьмя вкладками.каждая вкладка имеет фрагмент.

Когда я щелкаю что-то на вкладке 4, я хочу обновить вкладку 3 (или получить доступ к нестатическому методу на вкладке 3) .. Я искал, но все, что я нашел, было этов нем:

FragmentB fragment = (FragmentB)getFragmentManager().findFragmentByTag("FragmentB");

, и я не могу его использовать, поскольку я никогда не устанавливал тег на фрагмент.

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

есть ли решение для этого?

1 Ответ

0 голосов
/ 09 октября 2018

Прежде всего, я думаю, что не рекомендуется обновлять представление, которое пользователь не может видеть на экране в данный момент.Гораздо лучше обновить ваши данные, когда пользователь переходит на экран.Кстати, это не наша первая задача сейчас.

Я не уверен, что это все еще правильный способ найти Fragments в теге ViewPager, но вы можете найти их, как показано ниже:

Этот метод генерирует значение по умолчанию Tag для Fragment в ViewPager.

@NonNull
public static String generateViewPagerFragmentTag(int viewPagerId, int position) {
    final StringBuilder tagBuilder = new StringBuilder();
    tagBuilder.append("android:switcher:");
    tagBuilder.append(viewPagerId);
    tagBuilder.append(":");
    tagBuilder.append(position);
    return tagBuilder.toString();
} 

Чем вы можете использовать этот тег для поиска Fragment с помощью метода findFragmentByTag.

Также, как упоминалось в комментариях, вы можете использовать библиотеку EventBus для достижения того, что вы хотите сделать, но будьте осторожны с Fragment Lifecycle состояниями в ViewPager, потому что Fragment, с которым вы хотите общаться, может находиться в состоянии onPauseВаши изменения могут быть получены.Это зависит от того, в каком методе жизненного цикла вы подписываетесь и отписываетесь от шины.(Если вы используете OttoBus, вы не можете найти подписчиков для этого исключения события.) Вы можете сделать тот же шаблон с interfaces.Вы можете создать интерфейс и внедрить его в Fragments.

. Для другого решения вы можете напрямую получить доступ к нашим фрагментам в вашем ViewPager.Вот мой ответ для другого вопроса.

Наконец, как я уже упоминал в начале, я думаю, что вам следует реализовать решение, которое обновляет ваши данные, когда пользователь переключается на определенную вкладку ViewPager.Вы можете сохранить свои изменения данных в mem-кеше, а также прослушать изменения вкладки и обновить свое представление, когда пользователь точно перейдет на этот экран и будет готов увидеть изменения данных.Вы можете проверить Repository pattern для более сложного решения.

...