我正在尝试为Android-App创建一个ProgressDialog(只是一个简单的显示用户正在发生的事情,没有任何按钮或任何东西),但我无法做到正确。我一直在浏览论坛和教程以及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赢了'永远出现。该应用程序一直在运行,就像我从未添加过对话框一样。
我不知道我是否在正确的地方创建了对话框,我把它移动了一下但是,这也没有帮助。也许我在错误的背景下?上面的代码位于private ViewGroup _createInputForm()
中的MyApp
内。
赞赏任何提示,
答案 0 :(得分:42)
你必须在长计算开始之前调用pd.show,然后计算必须在一个单独的线程中运行。一旦这个线程完成,你必须调用pd.dismiss()来关闭prgoress对话框。
在这里你可以看到一个例子:
创建并显示progressdialog,并调用一个线程来运行繁重的计算:
@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();
}
};
}
答案 1 :(得分:25)
我给你一个解决方案,
试试这个...
首先在onCreate()
方法
private ProgressDialog progressDialog;
现在,在onCreate
方法中,您可以单击任意按钮,您将更改任何操作的活动。只需在那里设置进度条。
progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");
现在使用线程来处理要显示和隐藏的进度条
new Thread()
{
public void run()
{
try
{
sleep(1500);
// do the background process or any work that takes time to see progress dialog
}
catch (Exception e)
{
Log.e("tag",e.getMessage());
}
// dismiss the progress dialog
progressDialog.dismiss();
}
}.start();
就是这样!
答案 2 :(得分:4)
答案 3 :(得分:3)
使用AsyncTask也可以。这个类为你创建一个线程。您应该对其进行子类化并填写doInBackground(...)
方法。