如何在进一步处理之前关闭对话框?

问题描述:

我有一个alertDialog需要输入进一步处理。由于处理过程可能需要一段时间,因此我想关闭alertDialog并在执行处理方法的过程中显示图像。问题是process()在对话被实际解除之前被调用。因此,在加载时间内,程序基本上会“挂起”,显示警报对话框,直到完成process(),之后图像显示一秒钟,从而破坏其目的。如何在进一步处理之前关闭对话框?

我尝试在process()方法中显示图像,并尝试在同步方法中执行dialog.dismiss(),但结果保持不变。

alertDialogBuilder.setCancelable(true).setPositiveButton("OK", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 

     final String input = et.getText().toString(); 

     dialog.dismiss(); //finish this first 

     process(input); //then do this 

    } 
}); 

AlertDialog alertDialog = alertDialogBuilder.create(); 

alertDialog.show(); 
+0

刚开始'在不同的线程process'? – Tomer

+0

我是新来的编码,所以我很抱歉,如果我做错了。我试图把进程(输入)放入Thread的一个匿名子类中,但是我仍然得到相同的结果,除此之外它更快完成一些。 – GomuGomu

它应该是越简单

final String input = et.getText().toString(); 
dialog.dismiss(); 

// run in background 
AsyncTask.execute(new Runnable() { 
    @Override 
    public void run() { 
    process(input); 
    } 
}); 
+0

这个伎俩。谢谢您的回答。 – GomuGomu

您可以使用

alertDialogBuilder.setOnDismissListener(new 
    DialogInterface.OnDismissListener() { 
      @Override 
      public void onDismiss(DialogInterface dialogInterface) { 
       //do work on dismiss of dialog 
      } 
    }); 

所以,你可以显示图像在本节开始你的过程也是如此。添加一个回调监听器来处理结束,并使用回调使该图像在过程结束时不可见。

+0

这仍然优先处理(输入),然后不幸地显示图像。谢谢您的回答。 – GomuGomu