我需要处理DialogFragment的结束(在调用.dismiss后)-例如,我会在活动中显示一个toast,该活动“包含”片段dismiss后。
我该如何处理这个事件?
我该如何处理这个事件?
onDismiss()
方法,或者在构建该片段的代码块中使用setOnDismissListener()
方法。我遇到了类似的问题,但我想通知另一个活动关于对话框解散的情况(而不是创建和显示对话框的活动)。
尽管您可以像Austyn Mahoney建议的那样仅覆盖您的DialogFragment中的 onDismiss()
方法,但您不能使用 setOnDismissListener()
,因为DialogFragment简单地没有提供此方法(根据:Android Developers DialogFragment Reference)。
但仍然有另一种很好的方法来通知任何其他活动关于对话框解散,(我在这里找到了它:DialogFragment and onDismiss),它来了:
首先,您应该使您的 Activity(您想传递有关对话框解散信息的那个 Activity)实现 OnDismissListener
:
public final class YourActivity extends Activity implements DialogInterface.OnDismissListener {
@Override
public void onDismiss(final DialogInterface dialog) {
//Fragment dialog had been dismissed
}
}
根据Android开发者对话框片段参考文献,DialogFragment已经实现了具有onDismiss()
方法的OnDismissListener
。因此,您应该覆盖它并在其中调用您在YourActivity中实现的onDismiss()
方法:public final class DialogFragmentImage extends DialogFragment {
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
}
onDismiss(final DialogInterface dialog)
参数中传递对已关闭对话框的引用。请参阅:http://developer.android.com/reference/android/app/DialogFragment.html#onDismiss(android.content.DialogInterface) - KrzysiekDialogFragment
中,你可以使用以下代码:lateinit var onDismissListener : () -> Any
override fun onDismiss(dialog: DialogInterface) {
if (this::onDismissListener.isInitialized) {
onDismissListener()
}
super.onDismiss(dialog)
}
然后在创建对话框的片段中:
val dialog = DialogFragment()
dialog.onDismissListener = {
Toast.makeText(context, "Dismissed", Toast.LENGTH_SHORT).show()
}
dialog.show(context.supportFragmentManager, "tag")
onDismissListener(dialog)
,然后在你的 onDismissListener = {}
中,你可能可以找出该值。 - NeverEndingQueueonDismissListener(dialog)
,然后在你的onDismissListener = {}
中,你可能可以找出这个值。 - Tom Raganowicz