gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:35 26 4
gpt4 key购买 nike

任何人都可以看看我是否正确地执行了以下操作。我有一个带有进度对话框的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com