【发布时间】:2023-04-01 04:20:01
【问题描述】:
问题:如何创建从 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 中的唯一保证是通过 Bundle 通过 setArguments 和 getArguments 传入的保证。
如果应该是监听器,有一种方法可以引用活动:
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 的具体示例。它有是/否按钮。如何将这些按钮按下发送回创建它的 Fragment?
【问题讨论】:
-
您提到“但如果 DialogFragment 在其生命周期中暂停和恢复,则无法保证侦听器会在附近。”我认为片段状态在 onDestroy() 期间被破坏?您一定是对的,但是我现在对如何使用 Fragment 状态有点困惑。如何重现你提到的问题,听者不在?
-
我不明白为什么你不能简单地在 DialogFragment 中使用
OnClickListener listener = (OnClickListener) getParentFragment();,而你的主 Fragment 像你原来那样实现接口。 -
这是一个无关问题的答案,但它确实向您展示了这是如何以一种干净的方式完成的 stackoverflow.com/questions/28620026/…
标签: android android-fragments callback android-dialogfragment