如何获得调用 Android DialogFragment onDismiss() 的原因?

How to get reason for Android DialogFragment onDismiss() being called?

在我的 DialogFragment 中,我重写了 onDismiss() 以便在用户关闭对话框时向父片段提供回调以通知它。

但是,onDismiss() 也会调用配置更改(例如,当设备旋转时)- 在这种情况下我不希望回调。

所以我一直在努力寻找一种方法来区分 onDismiss() 被要求进行用户交互和配置更改,但没有任何运气。

对于这两种情况中的每一种,这些检查 return 我的 onDismiss() 方法中的相同值:

isRemoving() == false
isDetached() == false
isAdded() == true
isInLayout() == false
isVisible() == false

我也试过覆盖 onConfigurationChanged(Configuration newConfig),但根本没有调用。

知道如何找到 onDismiss() 被调用的原因吗?

如果用户通过按 BACK 或触摸对话框外的区域关闭对话框 window,onCancel() 将在 onDismiss() 之前调用。

如果用户通过单击 Button 关闭对话框,您将能够捕获单击事件。

因此您可以通过覆盖 onCancel() 而不是 onDismiss() 并跟踪点击事件来解决问题。