我有一个片段,从片段我出现一个DialogFragment,我希望DialogFragment向Fragment发送消息,或者重新获取Fragment的变量。我怎么办?
答案 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");