вызов метода для фрагмента в ViewPager


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

Xml моей деятельности:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" />

Нет, поэтому я не могу вызвать findFragmentById () (можно?) также я не знаю, что дать findFragmentByTag (), он всегда возвращает null : /

3 3

3 ответа:

PagerAdapter.метод getItem(int) обычно создает новый экземпляр фрагмента, поэтому вы можете использовать хэш-карту для хранения ссылки на уже существующие фрагменты.

// ViewPagerAdapter
private HashMap<Integer, Fragment> fragmentHashMap = new HashMap<>();

@Override
public Fragment getItem(int position) {
    if (fragmentHashMap.get(position) != null) {
        return fragmentHashMap.get(position);
    }
    TabFragment tabFragment = new TabFragment();
    fragmentHashMap.put(position, tabFragment);
    return tabFragment;
}

Затем вы можете найти свой фрагмент, чтобы вызвать его методы:

FragmentAdapter fa = (FragmentAdapter)viewPager.getAdapter();
TabFragment theFragment = (TabFragment)fa.getItem(index);
theFragment.customMethod(Object obj);

Вам придется отслеживать, какой фрагмент идет с каким индексом, потому что вы приведете их к их определенному классу, чтобы получить доступ к их методам.

Видоискатель должен иметь связанный с ним Фрагментадаптер. Таким образом, вы можете сделать что-то вроде:

FragmentAdapter fa = (FragmentAdapter)viewPager.getAdapter();
Fragment f = fa.getItem(index);

Я сделал это: http://tamsler.blogspot.fr/2011/11/android-viewpager-and-fragments-part-ii.html

Я не уверен, что нет лучшего способа сделать это...