Как уведомить все фрагменты в ViewPager о том, что один из них изменился?

#android #android-fragments #android-viewpager

#Android #android-фрагменты #android-viewpager

Вопрос:

Мой FragmentActivity содержит ViewPager с некоторыми страницами. После изменения одной страницы другие должны получать уведомления. Итак, мои шаги: 1. Отправить уведомление от фрагмента к действию 2. Получить список фрагментов 3. Вызвать уведомление для каждого из них.

Проблема заключается в шаге 2, чтобы получить фрагменты. Вызов adapter.GetItem(int i) вызывает MyFragmentAdapter.GetItem(int i), который возвращает новый фрагмент, который не привязан к activity .

Есть идеи?

Ответ №1:

Добавление следующих методов в YourFragmentPagerAdapter решает проблему:

 public Fragment getActiveFragment(ViewPager container, int position) {
    String name = makeFragmentName(container.getId(), position);
    return  mFragmentManager.findFragmentByTag(name);
}

private static String makeFragmentName(int viewId, int index) {
    return "android:switcher:"   viewId   ":"   index;
}
  

Комментарии:

1. Это решение будет работать до тех пор, пока внутренний статический метод FragmentPagerAdapter.makeFragmentName(int viewID, int index) продолжает использовать ту же строку для сохранения созданных фрагментов. Смотрите FragmentPagerAdapter.instantiateItem подробнее. Возможно, вам следует просто использовать

2. эм, как я уже говорил: на тот случай, если вы используете ActionBarSherlock от JakeWharton, он изменил библиотеку поддержки, чтобы этот метод был общедоступным.

Ответ №2:

Почему бы просто не отправить широковещательную рассылку из измененного фрагмента, а затем установить широковещательный приемник в других ваших фрагментах, которые получают широковещательную рассылку?

Комментарии:

1. Да, это решение. Но, очевидно, у вас должна быть возможность просто перебирать все фрагменты в ViewPager.