首页 > 解决方案 > 在DialogFragment的onDimiss回调中区分配置更改和真正的dismiss

问题描述

onDismissDialogFragment.

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. 旋转设备。

我想区分“真正的解雇”(案例 1 和 2 和 3)与配置更改(案例 4)

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

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

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

我怎样才能实现类似的事情DialogFragment

标签: javaandroidandroid-dialogfragment

解决方案


该类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
        }
    }
}

推荐阅读