问题:如何从一个 DialogFragment 创建一个回调到另一个 Fragment。在我的情况下,涉及的 Activity 应该完全不知道 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的Fragment。 它有Yes / No按钮。 我如何将这些按钮按下的情况发送回创建它的Fragment?
OnClickListener listener = (OnClickListener) getParentFragment();
,而你的主Fragment像最初一样实现接口。 - kiruwka