我想在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,以便您稍后将其关闭。

09-10 06:24