android - ProgressDialog( fragment )跨方向开关工作

标签 android android-fragments progressdialog

任何人都可以看看我是否正确地执行了以下操作。我有一个带有进度对话框的 fragment ,我需要它跨方向切换工作。我目前是这样做的:

// I am using the compat libraries
import android.support.v4.app.DialogFragment;

public class ProgressDialogFragment extends DialogFragment {

    private ProgressDialog mProgressDialog = null;
    private int            mMax            = 100;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(DialogFragment.STYLE_NO_TITLE, 0);
        setRetainInstance(true);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Title");
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        mProgressDialog.setCancelable(true);
        mProgressDialog.setProgress(0);
        mProgressDialog.setMax(mMax);
        mProgressDialog.setCanceledOnTouchOutside(false);

        return mProgressDialog;
    }

    // there seems to be a bug in the compat library - if I don't do the following - the dialog is not show after an orientation switch
    @Override
    public void onDestroyView() {
        if (getDialog() != null && getRetainInstance())
            getDialog().setDismissMessage(null);
        super.onDestroyView();
    }

    public void setMax(int arg1) {
        mProgressDialog.setMax(arg1);
        mMax = arg1;
    }

    public void setProgress(int arg1) {
        mProgressDialog.setProgress(arg1);
    }
}

在我的 Activity 中,我创建了这个 ProgressDialogFragment 并在需要显示对话框时调用 show() 。我试图理解为什么在 onCreateDialog 方法中我不能简单地返回 mProgressDialog 如果它已经存在(我得到一个异常说“在添加内容之前必须调用 requestFeature()”)。当然, fragment 的用途之一就是在这些情况下重新使用资源——为什么我需要创建一个新对话框而不是使用已经存在的对话框?

最佳答案

您不能简单地在 onCreateDialog 方法中传递旧对话框,因为它引用了旧上下文,即正在被销毁的 Activity 。

如果您不重新创建对话框,那么您将以内存泄漏告终。

关于android - ProgressDialog( fragment )跨方向开关工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176144/

相关文章:

android - 'normal' Kotlin 和 Kotlin for android 有区别吗?

安卓 | TextView.setText() 不起作用

android - 在 Android 的 ViewPager 中将子 fragment 添加到父 fragment

java - ProgressDialog 新 Activity Asynctask 未显示,为什么?

java - 切换到横向布局时应用程序崩溃

android - 创建两个自定义按钮

java - Google Cloud Speech API 是否会保存我的录音?

Android LiveData 在 fragment 中创建多个观察者

android - 使用并行多个异步任务处理单个进度对话框

android - ProgressDialog 是否可绘制? GIF 什么的?