繁体   English   中英

用非活动类编写的警报对话框在从调用活动中解除时不显示警报对话框

[英]alert dialog written in non activity class not showing alert dialog when dismissed from calling activity

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

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

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


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

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

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

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

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

//progress.dismiss();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM