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是 an 的内部类Activity,那么您可以使用活动名称.this来获取上下文。如果 TestAsyncTask 不是内部类,那么您将需要将您的实例传递Activity给构造函数,以便您可以将其作为Context方法提供ProgressDialog.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 回答