4

やりたいことは、フラグメントのクラスの関数を呼び出すことだけです。しかし、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 に答える