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(...)
方法。