ProgressDialog.dismiss()无法正常工作。

9
请查看以下示例代码。Toast消息被显示,但进度对话框从未隐藏。为什么?
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;


public class LoadExamActivity extends Activity implements Runnable{
    ProgressDialog pd;

    Handler Finished = new Handler(){
        @Override
        public void handleMessage(Message msg){
            Toast.makeText(getApplicationContext(), "DONE!", Toast.LENGTH_SHORT).show();
            pd.dismiss();
        }
    };

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.exam);
        Toast.makeText(this, "START!", Toast.LENGTH_SHORT).show();
        pd = new ProgressDialog(this);
        pd.show(this, "Waiting...", "Please wait five seconds...");
        Thread th = new Thread(this);
        th.start();


    }

    public void run() {
        //To change body of implemented methods use File | Settings | File Templates.
        for (int i = 0; i < 5; i++)
        {
            try
            {
                Thread.sleep(1000);
            }catch(Exception e){}
        }
        Finished.sendEmptyMessage(0);
    }


}

五秒钟后,“DONE”消息将显示,但进度对话框不会关闭,即使我在pd.show()后面立即放置pd.dismiss()也无法关闭进度对话框,我不知道为什么会发生这种情况,这让我很疯狂!

2个回答

31

你没有正确使用进度对话框。你会注意到IDE在你的pd.show(...)行旁边显示了一个整洁的警告标志。

你正在做以下事情:

  1. 使用new ProgressDialog()创建一个(不可见,无关紧要的)进度对话框

  2. 使用pd.Show()创建一个带有所需文本的另一个进度对话框,而不存储对它的引用。

  3. 关闭第一个对话框。来自步骤2的对话框仍然存在。

如果你用以下代码替换你的代码:

//pd = new ProgressDialog(this); 
pd = ProgressDialog.show(this, "Waiting...", "Please wait five seconds..."); 

它应该可以很好地运行。


成功了!你关于警告的说法是正确的,我没有注意到它。但是我不明白为什么IDE告诉我.show()方法不返回任何东西(void),但最终它返回一个ProgressDialog实例? - Davidoff
是的,这个可以工作。show()返回一个ProgressDialog实例,但使用new关键字也会得到相同的实例,我希望如此。使用上述方式,dismiss代码可以工作,然而,使用new关键字,代码无法工作。 - Khushboo
非常感谢您的精彩解释。 - suku

0

问题出在您创建ProgressDialog时使用的上下文。请使用主活动上下文来创建ProgressDialog,并在需要时使用show()和dismiss()方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接