ProgressDialog(Fragment)在方向开关上工作

时间:2013-01-05 20:34:51

标签: android android-fragments progressdialog

如果我正确地执行以下操作,任何人都可以查看。我有一个有progressdialog的片段,我需要它在一个方向开关上工作。我目前这样做:

// 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()”)。当然,片段的一个用途是在这些情况下重用资源 - 为什么我需要创建一个新的对话框,而不是使用已经存在的对话框?

1 个答案:

答案 0 :(得分:2)

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

如果你没有重新创建对话框,那么你最终会发生内存泄漏。