диалоговое окно оповещения, написанное в неактивном классе, не отображающее диалоговое окно оповещения, когда оно закрыто - PullRequest
1 голос
/ 16 февраля 2020

Я создаю класс под названием «Dailog» для создания диалогового окна с предупреждением, у которого есть собственный метод dismiss () для закрытия диалогового окна. а затем использовать его объект на многих экранах, где мне нужно показать диалоговое окно оповещения.

В своем вызывающем классе Activity я создаю экземпляр класса Dailog, а затем вызываю метод, который выполняет некоторые сетевые операции (которые не являются асинхронными c задача), а затем, когда сетевая задача завершена, я закрываю объект диалога. , Мне нужно подождать на том же экране, пока не завершится работа сети, но с диалогом, показывающим, что что-то происходит.

Во время отладки я вижу, что этот объект диалога не является нулевым. Нет исключений во время этого выполнения, но диалоговое окно с предупреждением никогда не появляется


public class Dialog  {

    private AlertDialog dialog  ;
    private AlertDialog.Builder builder;

    public Dialog(Activity activity , String Message , String titleMsg) {
        builder = new AlertDialog.Builder(activity);
        builder.setMessage(Message);
        builder.setTitle(titleMsg);
        builder.setCancelable(false);
        builder.setIcon(R.drawable.logoxl);
        dialog = builder.create();
        dialog.show();
    }
 public void dismiss(){
        this.dialog.dismiss();
    }

}


// my activity method(openMenu) on button click where I am calling this 

public void OpenMenu(View view){
 Dialog progress = new Dialog(this , "We are fetching today's menu...Please Wait" , "Biji's Kitchen");
        try {
            Data fetcheddata = new Data(this);           
            fetcheddata.getMenu();
        }catch(Exception e){
            e.printStackTrace();

        }
 progress.dismiss();
}

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

Попробуйте прокомментировать эту строку. Я надеюсь, что это должно работать.

//progress.dismiss();
0 голосов
/ 16 февраля 2020

Data.getMenu() является сетевой операцией и должна выполняться в отдельном потоке. Dialog.dismiss(), с другой стороны, является операцией пользовательского интерфейса и должна выполняться в главном потоке.

Таким образом, в потоке Data следует дождаться завершения сетевого запроса и затем отправить сообщение в поток пользовательского интерфейса, чтобы закрыть диалог после этого.

PS Чтобы быть более понятным: ваша текущая реализация показывает диалоговое окно - и немедленно закрывает его, поскольку show и dismiss называются единицами. за другим в потоке пользовательского интерфейса, но данные все еще загружаются в другом потоке.

...