我想在AsyncTask中显示一个ProgressDialog。
这太棒了。但是,如果我在mLoginPD.dissmiss()
中调用onPostExecute()
则不要运行。
屏幕上始终显示ProgressDialog。
这是我的代码:
SherlockActivity mActivity;
ProgressDialog mLoginPD;
public Task_Login(String name, String pass, SherlockActivity activity) {
this.passwort = pass;
this.benutzername = name;
this.mActivity = activity;
}
protected void onPreExecute() {
super.onPreExecute();
mLoginPD = new ProgressDialog(mActivity);
mLoginPD.show(mActivity, "Login", "Logge Spieler ein...");
}
protected void onPostExecute(Void result) {
Log.e("hello", "hello");
mLoginPD.dismiss();
mLoginPD.cancel();
if(mLoginPD.isShowing()) {
mLoginPD.dismiss();
}
}
onPostExecute()调用。我可以在LogCat中看到“你好”。
(我有doInBackground()但我无关紧要)
最佳答案
问题是您要创建两个ProgressDialog
对象。
这行:
mLoginPD = new ProgressDialog(mActivity);
创建一个对话框并将其分配给
mLoginPD
,但不显示它。这行:
mLoginPD.show(mActivity, "Login", "Logge Spieler ein...");
创建另一个对话框并显示该对话框。问题在于
show()
是一个静态方法,可以创建并显示一个对话框。因此,它正在创建与mLoginPD
分开的第二个。 mLoginPD
不会显示,因此调用dismiss()
或cancel()
不会执行任何操作。您需要做的是:
mLoginPD = ProgressDialog.show(mActivity, "Login", "Logge Spieler ein...");
代替这两行。这使用
show()
来创建和显示对话框并将其分配给mLoginPD
,以便您稍后将其关闭。