Android:ProgressDialog不';不显示
我正在尝试为Android应用程序创建一个ProgressDialog(只是一个简单的对话框,向用户显示正在发生的事情,没有按钮或任何东西),但我无法正确地完成它。我已经阅读了论坛、教程以及SDK附带的示例代码,但都没有用 这就是我得到的:Android:ProgressDialog不';不显示,android,progressdialog,android-context,Android,Progressdialog,Android Context,我正在尝试为Android应用程序创建一个ProgressDialog(只是一个简单的对话框,向用户显示正在发生的事情,没有按钮或任何东西),但我无法正确地完成它。我已经阅读了论坛、教程以及SDK附带的示例代码,但都没有用 这就是我得到的: btnSubmit.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { (...) Prog
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()
并在新建ProgressDialog
中乱动参数,结果什么都没有(所选参数不起作用的错误除外),这意味着:ProgressDialog永远不会显示。应用程序一直在运行,就好像我从未添加过对话框一样
我不知道我是否在正确的位置创建了对话框,我将它移动了一点,但这也没有帮助。也许我在错误的环境中?上述代码位于MyApp
中的private ViewGroup\u createInputForm()
中
任何提示都非常感谢,您必须在长时间计算开始之前调用pd.show,然后计算必须在单独的线程中运行。A此线程完成后,必须调用pd.disclesh()以关闭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();
}
};
}
我给你一个解决办法, 试试这个。。。 首先在
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();
就这些 这也可以通过使用。这个类为您创建一个线程。您应该将其子类化并填写doInBackground(…)
方法。进度对话框不会显示,因为您必须使用单独的线程。Android中的最佳实践是使用(强烈推荐)。
另请参见此内容。我已经重建了我的应用程序的一部分来完成此操作:)我阅读的教程听起来好像没有其他线程就可以完成此操作,但您从未停止学习。我还没有完全完成:现在ProgressDialog没有显示它应该显示的位置(至少它显示了!),只是在结果出来之前不久“闪烁”,但现在我想我可以自己完成其余的;)非常感谢你的帮助!为了完成这一点,以防有人感兴趣:ProgressDialog的“闪烁”只发生在模拟器中,而不会发生在实际设备上。在请求(onClick)被实际处理之前,仿真器似乎需要花费很长时间,而应用程序在这之前会冻结。在设备上,一切正常。您也可以调用runOnUiThread,而不是处理程序,这更清楚一些。嘿,Roflcopter。。你给出的这个灵魂指令的问题是我的线程处理在一个单独的类中。这是我的第一个类,它有所有的UI通过一个对象调用线程类,并在等待一些HTTP结果时执行它。。。现在,我的pd.show()必须位于显示UI的类中,但正如您的解决方案所述。。pd.disclose()应该位于实际执行工作的方法中,在工作完成后。。。但这对我来说是不可能的。。是否有其他可行的解决方案??我尝试在收到结果的那一行之后调用pd.disclose(),但仍然没有luck@thanksRoflcoptrException它真的对你很有帮助:)它完美地显示了progressDialog。但我的背景有点不同。我想在从一个应用程序切换到另一个应用程序时显示progressDialog,并希望避免断电。可能吗?这给了我一个错误只有创建视图层次结构的原始线程才能接触其视图。
请参阅