0

以下是关于我的应用的一些事实,然后是一个问题

我的应用程序有两个片段。

我的应用程序在首次启动时会创建某些文件结构和文档,这需要时间,因此我在创建文件结构时使用AsyncTask类方法来显示ProgressDialog。这是在onCreate我的 MainActivity 的方法中完成的,如下所示:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        progress = new ProgressDialog(this);
        progress.setMessage("Loading...");

        File testFile = new File("/mnt/sdcard/myNewFolder");
        if (!testFile.exists()) {
            new MyTask(progress).execute();
            setContentView(R.layout.activity_main);
        } else
            setContentView(R.layout.activity_main);
    }

问题是onActivityCreatedFragment的一个方法在完成之前开始运行new MyTask(progress).execute();。这会导致错误和问题。

为什么onActivityCreated我的其中一个方法Fragment在之前运行
new MyTask(progress).execute();???

请不要假设有一些我没有考虑到的愚蠢错误 xx

这是我的 MyTask 课程

public class MyTask extends AsyncTask<Void, Void, Void> {
    public MyTask(ProgressDialog progress) {
        // this.progress = progress;
    }

    public void onPreExecute() {
        progress.show();
    }

    public void onPostExecute(Void unused) {
        progress.dismiss();
    }

    @Override
    protected Void doInBackground(Void... params) {
        CreateFileStructure();
        return null;
    }
}

我需要在其他任何事情发生之前创建该文件结构——这就是我使用它的原因ProgressDialog。我究竟做错了什么?

4

2 回答 2

1

如果您看到片段的生命周期,片段的视图将在包含片段的活动的 onCreate 方法上实例化。

因此,您会收到该错误。

于 2012-09-12T11:23:54.707 回答
0

这是对我有用的代码 - 在ProgressDialog创建文件结构和文件时显示对话框,之后发生其他一切(片段等)。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        progress = new ProgressDialog(this);
        progress.setMessage("Loading...");

        File testFile = new File("/mnt/sdcard/myNewFolder");
        if (!testFile.exists())
            new MyTask(progress).execute();
        else
            setContentView(R.layout.activity_main);
    }

    public class MyTask extends AsyncTask<Void, Void, Void> {
        public MyTask(ProgressDialog progress) {
            // this.progress = progress;
        }

        public void onPreExecute() {
            progress.show();
        }

        public void onPostExecute(Void unused) {

            progress.dismiss();
            setContentView(R.layout.activity_main);
        }

        @Override
        protected Void doInBackground(Void... params) {
            CreateFileStructure();
            return null;
        }
    }
于 2012-09-12T12:01:00.060 回答