вызов метода для фрагмента в 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 ответа:
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
Я не уверен, что нет лучшего способа сделать это...