android片段应用程序中的活动序列流程

时间:2012-09-12 11:13:59

标签: android android-fragments android-activity

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

我的应用有两个片段。

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

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);
    }

问题是onActivityCreated之一的Fragment方法在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的原因。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果你看到片段的生命周期,那么片段的视图就会在包含片段的活动的onCreate方法上实例化。

因此你得到了这个错误。

答案 1 :(得分: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;
        }
    }