1

Fragment があり、その Fragment から DialogFragment を表示します。DialogFragment から Fragment にメッセージを送信するか、Fragment の変数を取得します。どうすればできますか?

4

2 に答える 2

3

このためにリスナーパターンを利用したいと思うかもしれません。始めるための簡単な例を次に示します。

public class MyDialogFragment extends DialogFragment {

    public interface MyDialogFragmentListener {
        public void abstract onDialogMessage(int someValueIWantToSendToFragment);
    }

    private MyDialogFragmentListener mListener;


....

    public void setListener(MyDialogFragmentListener listener) {
        mListener = listener;
    }


}

次に、ダイアログからフラグメントにデータを送信する必要があるときはいつでも、mListener.onDialogMessage(someValue);を呼び出します。

ダイアログフラグメントを作成するときは、MyDialogFragmentListenerのインスタンスを使用してダイアログフラグメントでsetListenerを呼び出すようにしてください。

于 2012-04-14T20:17:16.987 に答える
0

このコードは、dialogFragment の好きな場所に配置できます。

Bundle args = new Bundle();
args.putString("message",myMessage);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment fragment = Fragment.instantiate(getActivity(), MyFragment.class.getName(), args);
ft.replace(R.id.details, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();

たとえば、onCreateof ダイアログ フラグメントでは、bundle を使用してメッセージを送信します。

public static class MyDialogFragment extends DialogFragment { 

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String myMessage="Hello Fragment";
        Bundle args = new Bundle();
        args.putString("message",myMessage);
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        Fragment fragment = Fragment.instantiate(getActivity(), MyFragment.class.getName(), args);
        ft.replace(R.id.details, fragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
        ft.addToBackStack(null);
        ft.commit();
        return new AlertDialog.Builder(getActivity())
                .setIcon(R.drawable.ic_dialog_about)
                .setTitle(R.string.about)
                .setMessage(R.string.about_message)
                // ...
                .create();
    }
}

次の行だけを使用しMyFragmentて、メッセージを取得できます。

getArguments().getString("message");
于 2012-04-15T10:45:31.163 に答える