ProgressDialog.dismiss() не работает

пожалуйста, проверьте следующий код. Сообщения тостов отображаются, но progressdialog никогда не скрывается. Почему?

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);
    }


}

через пять секунд отображается сообщение "готово", но progressdialog не отклоняется и даже если я положил pd.уволить() прямо под тр ПД.show () Я не буду отклонять progressdialog, и я не знаю, почему это происходит, и это сводит меня с ума!

2 ответов


вы не используете диалоговое окно продвижения вправо. Вы заметите, что IDE показывает аккуратный маленький предупреждающий знак рядом с вашим pd.show(...) линии.

то, что вы делаете

  1. создайте (невидимый, нерелевантный) диалог прогресса, используя new ProgressDialog()

  2. создать другое диалог прогресса с нужный текст pd.Show(), без сохранения ссылки на него.

  3. закрыть первый диалог. Диалог (2) остается.

если вы замените свой код:

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

он должен работать просто отлично.


проблема здесь заключается в контексте, который вы использовали для создания ProgressDialog. Используйте контекст основного действия для создания ProgressDialog и используйте Show() и dissmiss () метод, где вам нужно.