0

ここに私のアプリに関するいくつかの事実とそれに続く質問があります

私のアプリには 2 つのフラグメントがあります。

私のアプリは、最初の起動時に特定のファイル構造とドキュメントを作成しますが、時間がかかるため、ファイル構造の作成中に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);
    }

問題はonActivityCreated、私のメソッドの 1 つが終了する前にFragment実行を開始することnew MyTask(progress).execute();です。これにより、エラーや問題が発生します。

なぜonActivityCreated私の s の 1 つのこのメソッドFragmentが BEFORE で実行されるのです
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;
    }
}

他の何かが起こる前に、そのファイル構造を作成する必要があります - それが私が this を使用している理由です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 に答える