Прежде всего, я думаю, что не рекомендуется обновлять представление, которое пользователь не может видеть на экране в данный момент.Гораздо лучше обновить ваши данные, когда пользователь переходит на экран.Кстати, это не наша первая задача сейчас.
Я не уверен, что это все еще правильный способ найти 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
для более сложного решения.