我创建了一个名为“ 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();
}
答案 0 :(得分:0)
Data.getMenu()
是网络操作,应在单独的线程中执行。另一方面,Dialog.dismiss()
是UI操作,应在主线程中执行。
因此,在Data
线程中,您应该等待网络请求完成,然后在之后之后将消息发布到UI线程以关闭对话框。
P.S。更清楚地说:您当前的实现确实显示对话框-并立即将其关闭,因为show
和dismiss
在UI线程中被一个接一个地调用,但是数据仍在另一个加载中线程。
答案 1 :(得分:0)
尝试评论此行。我希望它能工作。
//progress.dismiss();