0

タブとViewPagerを備えたマルチフラグメントABSフラグメントアクティビティが非常にうまく機能していますが、アプリケーションの実際の機能のために、フラグメントを取得して通信できる必要があります。findFragmentById()を呼び出せるようにするには、フラグメントにIDが必要です。IDは(私が正しく理解している場合)<fragment>タグを持っているか、FragmentTransactionによって作成されている必要があります。私が使用しているTabsAdapter/ViewPagerコードは、Fragment.instantiate()を使用してFragmentクラスからフラグメントを作成しますが、これではIDを設定できません。

では、ViewPagerでタグを使用する方法、またはFragmentTransactionを使用してタブフラグメントを作成する方法についてのアイデアはありますか?TabsAdapter内に独自のID/フラグメントマッピングを非常に簡単に実装できますが、可能であれば、標準のメカニズムを使用したいと思います。

4

1 に答える 1

0

FragmentPagerAdapterは、makeFragmentNameと呼ばれるプライベートメソッドを使用して、含まれているすべてのFragmentタブにタグを付けます。

これは壊れやすいソリューションですが、ABS4.0.2以降で機能します。探しているフラグメントの位置インデックスを知る必要があります

正直なところ、脆弱性の低い独自のソリューションを使用する必要があります。少なくとも、それがいつ/どのように壊れるかを制御することができます。

public Fragment getFragmentByPosition(ViewPager container, int position) {
    String name = makeFragmentName(container.getId(), position);
    return  mFragmentManager.findFragmentByTag(name);
}

//WARNING: this will break if ABS changes this method.
private static String makeFragmentName(int viewId, int index) {
    return "android:switcher:" + viewId + ":" + index;
}
于 2012-05-02T23:38:55.140 に答える