如何在执行任务时使用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;
}
}
答案 0 :(得分:2)
假设TestAsyncTask
是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();
}
}