问题:如何创建从DialogFragment到另一个Fragment的回调。就我而言,所涉及的活动应该完全不知道DialogFragment。
认为我有
public class MyFragment extends Fragment implements OnClickListener
然后在某个时候我可以做
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
MyDialogFragment的样子
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
但是,如果DialogFragment暂停并在其生命周期中恢复,则无法保证侦听器会存在。Fragment中唯一的保证是通过setArguments和getArguments通过Bundle传递的保证。
有一种方法可以引用活动(如果它应该是侦听器):
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
但是我不希望Activity监听事件,我需要一个Fragment。实际上,它可以是实现OnClickListener的任何Java对象。
考虑一个片段的具体示例,该片段通过DialogFragment呈现AlertDialog。它具有是/否按钮。如何将这些按钮按下操作发送回创建它的片段?
OnClickListener listener = (OnClickListener) getParentFragment();
在DialogFragment中使用,而您的主要Fragment却像最初那样实现了接口。