3

新しいプロジェクトの作成時に自動的に作成されたデフォルトのマスター/ディテール フローがあります。私の質問はです。ディテール側にボタンを付けると。そのボタンを押してリスト側を更新する方法はありますか? つまり、ItemDetailFragment と ItemListFragment は通信できますか?

4

1 に答える 1

6

はい、アクティビティを通じてリスナーと通信するだけです。

あなたの活動:

public class MyActivity extends FragmentActivity implements OnFragmentClickListener {
    @Override
    public void OnFragmentClick(int action, Object object) {
        switch(action) {
        }
    }
}

リスナー クラス:

    public interface OnFragmentClickListener {
        public void OnFragmentClick(int action, Object object);
    }

インターフェイスを実装するために、フラグメントはコードのどこかに次のようになります。

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (OnFragmentClickListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement listeners!");
        }
    }

次に、フラグメントは次のように相互に通信します: フラグメント A -> アクティビティ -> フラグメント B。アクティビティは、同期の問題を心配することなく、フラグメントでメソッドを直接呼び出すことができます。

フラグメント a からの呼び出しの例:

mListener.OnFragmentClick(GLOBAL_ACTION_KEY someObject);

アクティビティは次を処理します。

public class MyActivity extends FragmentActivity implements OnFragmentClickListener {
    @Override
    public void OnFragmentClick(int action, Object object) {
        switch(action) {
            case GLOBAL_ACTION_KEY:
                // you call fragmentB.someMethod();
                break;
        }
    }
}
于 2012-10-12T12:09:45.570 に答える