2

タスクの実行時に AsyncTask クラスを使用してダイアログを表示するにはどうすればよいですか?

class TestAsynTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onPreExecute() {
        ProgressDialog.show(???, null, null);
        super.onPreExecute();
    }
    @Override
    protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
        return null;
    }

}
4

1 に答える 1

2

TestAsyncTaskが の内部クラスであると仮定するとActivity、アクティビティ名.thisを使用してコンテキストを取得できます。TestAsyncTask が内部クラスでない場合は、インスタンスをコンストラクターに渡して、メソッドActivityに として提供できるようにする必要があります。ContextProgressDialog.show()

以下は、内部クラス メソッドの例です。

class MyActivity extends Activity {
    //Activity Lifecycle methods

    class TestAsynTask extends AsyncTask<Void, Void, Void> {
        ProgressDialog dialog;

        @Override
        protected void onPreExecute() {
            dialog = ProgressDialog.show(MyActivity.this, "title", "message");
            super.onPreExecute();
        }

        @Override
        protected Void doInBackground(Void... params) {
            //very long computation...
            return null;
        }

        @Override
        protected void onPostExecute(Void void) {
           dialog.cancel();
        }
    }
}

ProgressDialogメソッド内のインスタンス変数に保存し、メソッド内でそれonPreExecute()を呼び出す必要があることに気付くでしょう。cancel()onPostExecute()

他のアプローチも同様に見えます。

class MyActivity extends Activity {
    //Activity Lifecycle methods


}

class TestAsynTask extends AsyncTask<Void, Void, Void> {
    ProgressDialog dialog;
    MyActivity activity;        

    TaskAsynTask(MyActivity activity) {
        this.activity = activity;
    }

    @Override
    protected void onPreExecute() {
        dialog = ProgressDialog.show(activity, "title", "message");
        super.onPreExecute();
    }

    @Override
    protected Void doInBackground(Void... params) {
        //very long computation...
        return null;
    }

    @Override
    protected void onPostExecute(Void void) {
        dialog.cancel();
    }
}
于 2012-05-23T15:02:40.693 に答える