android - 带有屏幕旋转的 Fragment 上的 DialogFragment

标签 android rotation fragment

在我的主要 Activity 中,我有一个 fragment ,我在其中应用了 setRetainInstance(true),这样我在其中使用的 AsyncTask 就不会受到方向变化的干扰。

AsyncTask 处理了很多工作。这就是为什么我想在我的 Activity 顶部显示一个带有进度条的对话框。

我做了一些研究并成功地使用了 DialogFragment:

公共(public)类 DialogWait 扩展 DialogFragment {

private ProgressBar progressBar;

public DialogWait() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.dialog_wait, container);

    Dialog dialog = getDialog();
    dialog.setTitle("Hello");
    setCancelable(false);

    progressBar = (ProgressBar) view.findViewById(R.id.progress);

    return view;
}

public void updateProgress(int value) {
    progressBar.setProgress(value);
}

这是我的 AsyncTask:

public class InitAsyncTask extends AsyncTask<Void, Integer, Void> {

private Context activity;
private OnTaskDoneListener mCallback;
private DialogWait dialog;

public InitAsyncTask(Context context, OnTaskDoneListener callback, DialogWait dialogWait) {
    activity = context;
    mCallback = callback;
    dialog = dialogWait;
}

@Override
protected Void doInBackground(Void... params) {
    doStuff();

    return null;
}

@Override
protected void onProgressUpdate(Integer... values) {
    dialog.updateProgress(values[0]);
}

@Override
protected void onPostExecute(Void result) {     
    publishProgress(100);
            if(dialog != null)
         dialog.dismiss();
    mCallback.onTaskDone();
}

private void doStuff() {
          //...
    }

如果我不改变屏幕旋转,它工作正常。但是如果我这样做了,对话框就会被关闭,几秒钟后,我得到了一个 NullPointerEsception,自从我设置了条件之后,这是胡说八道:if(dialog != null)

我做错了什么?

最佳答案

已找到解决方案!

我没有对包含我的 AsyncTask 的 fragment 做正确的事情。

因为,我还没有真正理解 Fragment 中方向的概念,感谢这个链接:http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

关于android - 带有屏幕旋转的 Fragment 上的 DialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17600506/

相关文章:

android - 适用于安卓的谷歌加号 : Invalid Credentials

android - 如果您有多种产品口味(不同的远程服务器实例),如何处理 Play 商店 alpha/beta 测试

android - MonoDroid 自定义控件 + 以编程方式填充 ListView

android - 如何控制另一个 fragment

android - Titanium SDK 在 Ubuntu 12.04 上无法识别 Titanium CLI、node、alloy 或 npm

OpenGL - FPS 风格相机移动,物体固定在相机上

iPhone/iPad : When to change background on rotate of device

ios - 我如何在 iOS 中为 ECSlidingViewController 构建 3D 转换?

android - 导航后未附加回收站 View

android - 如何防止在android fragment 中按下后退按钮时调用onCreateView