Android:ProgressDialog不';不显示

Android:ProgressDialog不';不显示,android,progressdialog,android-context,Android,Progressdialog,Android Context,我正在尝试为Android应用程序创建一个ProgressDialog(只是一个简单的对话框,向用户显示正在发生的事情,没有按钮或任何东西),但我无法正确地完成它。我已经阅读了论坛、教程以及SDK附带的示例代码,但都没有用 这就是我得到的: btnSubmit.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { (...) Prog

我正在尝试为Android应用程序创建一个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()
并在
新建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,并希望避免断电。可能吗?这给了我一个错误
只有创建视图层次结构的原始线程才能接触其视图。
请参阅