在ViewPager中调用片段上的方法

fok*_*oke 3 android android-fragments android-fragmentactivity

我想做的就是调用Fragment类的函数.但我似乎无法找到一种方法来访问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" />
Run Code Online (Sandbox Code Playgroud)

没有这样我不能调用findFragmentById()(可以吗?)我也不知道给findFragmentByTag()提供什么,它总是返回null:/

Mic*_*ton 11

但是,pagerAdapter.getItem(int)方法通常会创建片段的新实例,因此您可以使用HashMap存储对现有片段的引用.

// 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;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以找到你的片段来调用它的方法:

FragmentAdapter fa = (FragmentAdapter)viewPager.getAdapter();
TabFragment theFragment = (TabFragment)fa.getItem(index);
theFragment.customMethod(Object obj);
Run Code Online (Sandbox Code Playgroud)

您必须跟踪哪个片段与哪个索引一起使用,因为您将它们转换为特定的类以访问其方法.