问题:如何创建从DialogFragment到另一个片段的回调。就我而言,涉及的活动应完全不知道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暂停,请绕过并在整个生命周期中恢复。碎片中的唯一保证是通过setArguments和getArguments通过Bundle传入的。
有引用的活动,如果它应该是接收器的方式:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
但我不希望活动侦听事件,我需要一个片段。真的,它可以是实现OnClickListener的任何Java对象。
考虑通过DialogFragment呈现AlertDialog的片段的具体示例。它有Yes/No按钮。我怎样才能将这些按钮发送回创建它的片段?
您刚才提到“但也不能保证,如果DialogFragment暂停监听器将围绕并通过其L-恢复ifecycle“。我认为碎片状态在onDestroy()期间被破坏?你一定是对的,但我现在只是有点困惑如何使用Fragment状态。我如何重现你提到的问题,听众不在身边? – Sean
我不明白为什么你不能简单地用'OnClickListener监听=(OnClickListener)getParentFragment();'在DialogFragment,而是和你的主要片段实现的接口为你做了最初。 – kiruwka
这里是一个答案,一个不相关的问题,但它不告诉你这是如何在一个干净的方式http://stackoverflow.com/questions/28620026/implement-dialogfragment-interface-in-onclicklistener/33713825#33713825 – user2288580