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

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

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

Любые идеи?


person kzotin    schedule 03.11.2011    source источник


Ответы (2)


Добавление следующих методов в 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;
}
person kzotin    schedule 10.11.2011
comment
Это решение будет работать до тех пор, пока внутренний статический метод FragmentPagerAdapter.makeFragmentName(int viewID, int index) продолжает использовать ту же строку для сохранения созданных фрагментов. Подробнее см. FragmentPagerAdapter.instantiateItem. Возможно, вам следует просто использовать - person Diederik; 24.02.2012
comment
хм, как я уже говорил: если вы используете ActionBarSherlock Джейка Уортона, он изменил библиотеку поддержки, чтобы этот метод был общедоступным. - person Diederik; 24.02.2012

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

person Kurtis Nusbaum    schedule 03.11.2011
comment
Да, это решение. Но, очевидно, у вас должна быть возможность просто перебирать все фрагменты в ViewPager. - person kzotin; 03.11.2011