Android:如何从DialogFragment发送消息到片段?

时间:2012-04-14 19:54:54

标签: android android-fragments android-dialogfragment

我有一个片段,从片段我出现一个DialogFragment,我希望DialogFragment向Fragment发送消息,或者重新获取Fragment的变量。我怎么办?

2 个答案:

答案 0 :(得分:3)

您可能想要使用Listener模式。这是一个让你入门的简单例子:

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);

确保在创建dialogfragment时,使用MyDialogFragmentListener实例调用setListener。

答案 1 :(得分: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();

例如在onCreate对话框片段中,我们使用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");