在DialogFragment的onDimiss回调中区分配置更改和实际关闭

时间:2018-07-03 18:47:54

标签: java android android-dialogfragment

我在onDismiss中有以下DialogFragment回调。

public class MyDialogFragment extends DialogFragment {
    @Override
    public void onDismiss(DialogInterface dialog) {
        // How to check whether this callback is caused by configuration change,
        // Or real dismiss?

        super.onDismiss(dialog);
    }
}

onDismiss在以下情况下会被调用。

  1. 按返回按钮退出DialogFragment
  2. 在对话框区域外触摸以退出。
  3. 明确呼叫dismiss()
  4. 旋转设备。

我想通过配置更改(情况4)区分“实际解雇”(情况1&2&3)

Activity中,我通常这样做是为了区分。

@Override
public void onPause() {
    super.onPause();

    if (this.isFinishing()) {
        // Real "termination"
    }
}

如何在DialogFragment中实现类似的目的

1 个答案:

答案 0 :(得分:0)

Activity类提供了isChangingConfigurations()调用,它使您可以检查活动当前是否正在进行配置更改。如果您可以在onDismiss()回调期间访问活动,则可以使用它。

但是,对话框从活动中分离后 被关闭,因此getActivity()在此回调中将返回null。不过,您可以通过实现onAttach()回调来存储对该活动的引用。

public class MyDialogFragment extends DialogFragment {

    private MyActivity activity;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.activity = (MyActivity) context;
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        super.onDismiss(dialog);

        if (activity.isChangingConfigurations()) {
            // your code here
        }
    }
}