以非活动类编写的警报对话框在被取消调用活动时不显示警报对话框

时间:2020-02-16 17:39:08

标签: android android-alertdialog

我创建了一个名为“ Dailog”的类来构建警报对话框,该类具有自己的dismiss()方法来关闭对话框。然后在需要显示警报对话框的许多屏幕中使用它的Object。

在我的调用Activity类中,我创建Dailog类的实例,然后调用执行一些网络操作的方法(这不是异步任务),然后在完成网络任务后,我取消对话框对象。我需要在同一屏幕上等待,直到网络操作完成,但对话框显示正在发生某些事情。

在调试时,我确实看到该对话框对象不为null。在整个执行过程中没有例外,但警报对话框从未显示


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 :(得分:0)

Data.getMenu()是网络操作,应在单独的线程中执行。另一方面,Dialog.dismiss()是UI操作,应在主线程中执行。

因此,在Data线程中,您应该等待网络请求完成,然后在之后之后将消息发布到UI线程以关闭对话框。

P.S。更清楚地说:您当前的实现确实显示对话框-并立即将其关闭,因为showdismiss在UI线程中被一个接一个地调用,但是数据仍在另一个加载中线程。

答案 1 :(得分:0)

尝试评论此行。我希望它能工作。

//progress.dismiss();