AsyncTask Android 关闭 ProgressDialog
AsynTask Android Close ProgreesDialog
我有问题。下面是 MainActivity 和 class: Testing 的代码。如何在执行异步任务方法 onPostExecute 后关闭 ProgressDialog?。它在单独的 classes 中。有什么想法吗?
public class MainActivity extends ActionBarActivity {
private SwitchCompat tg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tg = (SwitchCompat) findViewById(R.id.switch1);
tg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
Toast.makeText(getApplicationContext(), "START", Toast.LENGTH_SHORT).show();
pd = new ProgressDialog(MainActivity.this);
pd.setTitle("Loading...");
pd.setMessage("Please wait.");
pd.show();
Testing testing= new Testing(getApplicationContext());
xml.execute();
} else {
Toast.makeText(getApplicationContext(), "Synchronisation is offline.", Toast.LENGTH_SHORT).show();
}
if (pd != null) {
pd.dismiss();
}
}
});
}
和我的异步任务 class:
public class Testing extends AsyncTask<Void, Void, Void> {
Boolean dataFromAsyncTask;
private Context context;
ProgressDialog pd;
public Testing (Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context, "PRE EXECUTE.", Toast.LENGTH_SHORT).show();
}
@Override
protected Void doInBackground(Void... arg0) {
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Toast.makeText(context, "POST EXECUTE.", Toast.LENGTH_SHORT).show();
}
}
在您的 AsyncTask
中创建 ProgressDialog
并将其从 Activity
中删除。
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context, "PRE EXECUTE.", Toast.LENGTH_SHORT).show();
pd = new ProgressDialog(this.context);
}
然后您可以在 onPostExecute()
中关闭它
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Toast.makeText(context, "POST EXECUTE.", Toast.LENGTH_SHORT).show();
if (pd != null && pd.isShowing())
pd.dismiss();
}
但我会通过 Activity Context
而不是 Application Context
。
Testing testing= new Testing(MainActivity.this);
我有问题。下面是 MainActivity 和 class: Testing 的代码。如何在执行异步任务方法 onPostExecute 后关闭 ProgressDialog?。它在单独的 classes 中。有什么想法吗?
public class MainActivity extends ActionBarActivity {
private SwitchCompat tg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tg = (SwitchCompat) findViewById(R.id.switch1);
tg.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
if (isChecked) {
Toast.makeText(getApplicationContext(), "START", Toast.LENGTH_SHORT).show();
pd = new ProgressDialog(MainActivity.this);
pd.setTitle("Loading...");
pd.setMessage("Please wait.");
pd.show();
Testing testing= new Testing(getApplicationContext());
xml.execute();
} else {
Toast.makeText(getApplicationContext(), "Synchronisation is offline.", Toast.LENGTH_SHORT).show();
}
if (pd != null) {
pd.dismiss();
}
}
});
}
和我的异步任务 class:
public class Testing extends AsyncTask<Void, Void, Void> {
Boolean dataFromAsyncTask;
private Context context;
ProgressDialog pd;
public Testing (Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context, "PRE EXECUTE.", Toast.LENGTH_SHORT).show();
}
@Override
protected Void doInBackground(Void... arg0) {
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Toast.makeText(context, "POST EXECUTE.", Toast.LENGTH_SHORT).show();
}
}
在您的 AsyncTask
中创建 ProgressDialog
并将其从 Activity
中删除。
@Override
protected void onPreExecute() {
super.onPreExecute();
Toast.makeText(context, "PRE EXECUTE.", Toast.LENGTH_SHORT).show();
pd = new ProgressDialog(this.context);
}
然后您可以在 onPostExecute()
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Toast.makeText(context, "POST EXECUTE.", Toast.LENGTH_SHORT).show();
if (pd != null && pd.isShowing())
pd.dismiss();
}
但我会通过 Activity Context
而不是 Application Context
。
Testing testing= new Testing(MainActivity.this);