アップデート
アクティビティは親コントローラーであり、フラグメント/ビュー自体の範囲外に関係するフラグメント/ビューによって発生したイベントを処理する責任を負う必要があります。
フラグメントは、それがホストするビューのサブコントローラーとして機能します。独自のビュー間のすべてのイベントと通信、フラグメントはそれ自体を処理する必要があります。フラグメントのスコープと責任の範囲外のイベント (別のフラグメントへのデータの送信など) がある場合、そのイベントはその親コントローラーであるアクティビティにエスカレートする必要があります。
年
このチュートリアルから: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
フラグメント間で直接値を渡すよりも、アクティビティがそのフラグメントに変更を適用できるようにする方が適切です。ActivityにメソッドとのFragmentListener
インターフェースを実装させます。onQuery(Bundle data)
onResult(Bundle data)
各フラグメントに変数を作成し、FragmentListener
各フラグメントを次のようにオーバーライドしますonAttach()
。
public void onAttach(Activity activity) {
super.onAttach(activity);
//---register parent activity for events---
try{
fragmentListener = (FragmentListener) activity;
}catch (ClassCastException e)
{
throw new ClassCastException("Parent activity must implement interface FragmentListener.");
}
}
これにより、子フラグメントが親 Activity に自動的に登録されるようになります。
fragmentListener
また、 で参照を解放することを忘れないでくださいonDetach()
。
これで、アクティビティをフラグメントから呼び出すことができます。
一方、Activity は、getFragmentManager().findFragmentByTag("fragmentA")
またはを使用して常にフラグメントを検索できますfindFragmentById("FragmentA")
。フラグメントを見つけることができれば、それをFragmentA
クラスにキャストしてそのメソッドを呼び出すことができます。FragmentB
または他のフラグメントでも同じことができます..