Android:ProgressDialog不显示

我正在尝试为Android应用程序创build一个ProgressDialog(只是一个简单的向用户显示正在发生的事情,没有button或任何东西),但我无法正确理解。 我已经通过论坛和教程以及SDK附带的示例代码,但无济于事。

这是我得到的:

btnSubmit.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { (...) ProgressDialog pd = new ProgressDialog(MyApp.this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("Working..."); pd.setIndeterminate(true); pd.setCancelable(false); // now fetch the results (...long time calculations here...) // remove progress dialog pd.dismiss(); 

我也尝试添加pd.show(); 并在new ProgressDialog混淆了参数,导致什么都没有(除了所选参数将不起作用的错误),这意味着ProgressDialog不会出现。 该应用程序只是继续运行,就好像我从来没有添加对话框。

我不知道我是否在正确的位置创build了对话框,但是我把它移动了一下,但是这也没有帮助。 也许我在错误的情况下? 上面的代码在MyApp private ViewGroup _createInputForm()中。

任何提示是赞赏,

你必须在长时间计算开始之前调用pd.show,然后计算必须在一个单独的线程中运行。 一旦这个线程完成,你必须调用pd.dismiss()来closuresprgoress对话框。

在这里你可以看到一个例子:

进度对话框被创build并显示,并调用一个线程来执行一个繁重的计算:

 @Override public void onClick(View v) { pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false); Search search = new Search( ... ); SearchThread searchThread = new SearchThread(search); searchThread.start(); } 

这里的线程:

 private class SearchThread extends Thread { private Search search; public SearchThread(Search search) { this.search = search; } @Override public void run() { search.search(); handler.sendEmptyMessage(0); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { displaySearchResults(search); pd.dismiss(); } }; } 

我给你一个解决scheme,试试这个….首先在onCreate()方法之前定义Activity中的Progress对话框。

私人进度对话进度对话框;

现在在oncreate方法,你可能有任何button点击你将改变任何行动的活动。 只需在那里设置进度栏。

 progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading..."); 

现在使用线程Hamndle进度条来显示和隐藏

 new Thread() { public void run() { try { sleep(1500); // do the background process or any work that takes time to see progreaa dialog } catch (Exception e) { Log.e("tag",e.getMessage()); } // dismiss the progressdialog progressDialog.dismiss(); } }.start(); 

就这样!

“进度”对话框不显示,因为您必须使用单独的线程。 Android中的最佳实践是使用AsyncTask (强烈推荐)。 另请参阅此答案 。

这也可以通过使用AsyncTask 。 这个class级为你创build一个线程。 你应该doInBackground(...)它并填充doInBackground(...)方法。