ProgressDialog.dismiss () не работает - PullRequest
8 голосов
/ 25 февраля 2012

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

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.dismiss () прямо под thr pd.show (), я не отклоню progressdialogлибо я не знаю, почему это происходит, и это сводит меня с ума!

Ответы [ 2 ]

29 голосов
/ 25 февраля 2012

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

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

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

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

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

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

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

, он должен нормально работать.

0 голосов
/ 11 мая 2018

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

...