4

我想做的就是调用我的 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" />

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

4

3 回答 3

14

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;
}

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

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

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

于 2016-07-02T23:29:45.620 回答
1

ViewPager 应该有一个与之关联的 FragmentAdapter。因此,您可以执行以下操作:

FragmentAdapter fa = (FragmentAdapter)viewPager.getAdapter();
Fragment f = fa.getItem(index);
于 2012-11-23T00:52:22.957 回答
0

我这样做了: http: //tamsler.blogspot.fr/2011/11/android-viewpager-and-fragments-part-ii.html

我不确定有没有更好的方法来做到这一点......

于 2012-11-23T21:29:34.487 回答