0

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

ので、タブの断片を作成するためにViewPagerでタグを使用するか、またはFragmentTransactionを使用する方法のための任意のアイデア? TabsAdapter内で自分のid/fragmentマッピングを実装することは簡単ですが、可能であれば標準的なメカニズムを使用したいと思います。

+0

ご利用の場合は何ですか?あなたは、「私は断片を握り、彼らとコミュニケーションすることができる必要がある」と言います。 AndroidのアクティビティAPI(getFragmentById(...)など)だけではできない方法があります。 ViewPagerでフラグメントを作成する場合は、ViewPagerからフラグメントを参照できるようにする必要があります。 郵便番号以上の詳細 –

+0

私の使用例は、私のタブが複雑なオブジェクトのマスタービューといくつかの詳細ビューですが、データは通信スレッドで取得され、フラグメントUIが作成された後に非同期に到着するため、結果。私が言ったようにTabsAdapterでそれらをマップすることができましたが、それらをより疎結合させることを望んでいました(おそらく大量生産、それです...)。それをもう少し試した後、より良い解決策は、そのデータをフラグメントに追加し、notifyDataSetChanged()を使用してUIの更新をトリガーします。 –

答えて

0

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

これは壊れやすいソリューションですが、ABS 4.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; 
} 
+0

答えをいただきありがとうございます。これは、私が推測していたことは、ABSを使ってデバッガを突き止めたことによるものだと確信しています。上記のコメント –

関連する問題