进度对话框不会出现 - Android

时间:2011-06-24 17:00:44

标签: android function progressdialog dialog

我想在我的应用中创建一个进度对话框,以便在发送一些信息时使用。但是我写的代码不起作用。方法send()执行但对话框永远不会出现,因为它很快就会解散

这是我的代码:

    ProgressDialog myProgressDialog = ProgressDialog.show(Tents.this,
                                "Please wait...", "Sending...", true);
    send();
    myProgressDialog.dismiss();
    goFour();

如何让对话框持续一段时间?

5 个答案:

答案 0 :(得分:2)

你可能正在获得一个进度对话框,但是由于没有什么值得等待而立即解除它。

我假装你想在OnCreate中想要这个例子:

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);

     ProgressDialog pd = ProgressDialog.show(this, "Please wait...", "Sending...");
     new Thread(new Runnable(){
         public void run() {
             send();
             pd.dismiss();
         }
     }).start();

     gofour();
  }

编辑:如果它仍然立即消失,请确保send();执行实际需要一些时间的事情。 ;)

答案 1 :(得分:2)

首先 - 你不应该在与show()和dismiss()相同的线程中执行send() - 因为你在发送过程中有效地阻止了UI线程。该对话框实际上永远不会显示 - 因为为了在调用show()之后显示它,您需要将控件返回到UI线程中的主循环器,并简单地完成处理您正在处理的任何事件。否则,UI线程永远不会有机会绘制对话框。

最好的想法是在AsyncTask中开始运行send()并在onPostExecute()中调用dismiss()(请参阅http://developer.android.com/reference/android/os/AsyncTask.html以了解如何运行异步任务)。

答案 2 :(得分:0)

UI线程用于启动send(),这将不起作用,并且不会显示进度对话框。 在另一个线程或AsynTask doBackground中调用send,并在完成时关闭该对话框。

答案 3 :(得分:0)

如果您的发送操作快速完成以至于对话框无法正常显示,我建议您通过requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)使用活动右上角的不确定进度条,然后使用setProgressBarIndeterminateVisibility(true/false)

答案 4 :(得分:0)

“我想我真正的问题是如何才能让它持续一段时间?”我的回答是为什么??? !!!

我认为您最好显示一个警告对话框以确认您的发送功能已经完成,对于用户必须无缘无故地等待会很烦人!