Android ProgressDialog不';我没有出现。阿盖恩

Android ProgressDialog不';我没有出现。阿盖恩,android,progressdialog,Android,Progressdialog,我很困惑,因为这在其他活动中对我来说效果很好,这里我基本上只是复制粘贴了代码,但是ProgressDialog没有出现。代码如下: public class MyListActivity extends ListActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCont

我很困惑,因为这在其他活动中对我来说效果很好,这里我基本上只是复制粘贴了代码,但是ProgressDialog没有出现。代码如下:

public class MyListActivity extends ListActivity {  
  public void onCreate(Bundle savedInstanceState) 
         {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.mylayout);          
             final ProgressDialog progress = new ProgressDialog(this);        
             progress.setProgressStyle(STYLE_SPINNER);
             progress.setIndeterminate(true);
             progress.setMessage("Working...");
             progress.show();
             Thread thread = new Thread() 
                {          
                  public void run() 
                  {

                      //long operation populating the listactivity
                      progress.dismiss();
                  }
                };
                thread.run();               
         }
}

不确定这是否是问题的根本原因,但请尝试执行thread.start()而不是thread.run()。执行start()实际上会启动一个新线程,可能会给进度对话框一个显示的机会

您应该使用来管理长期操作

private class LongOperation extends AsyncTask<HttpResponse, Integer, SomeReturnObject>
{
    ProgressDialog pd;
    long totalSize;

    @Override
    protected void onPreExecute()
    {
        pd = new ProgressDialog(this);
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setMessage("Please wait...");
        pd.setCancelable(false);
        pd.show();
    }

    @Override
    protected SomeReturnObject doInBackground(HttpResponse... arg0)
    {
        // Do long running operation here           
    }

    @Override
    protected void onProgressUpdate(Integer... progress)
    {
        // If you have a long running process that has a progress 
        pd.setProgress((int) (progress[0]));
    }

    @Override
    protected void onPostExecute(SomeReturnObject o)
    {
        pd.dismiss();
    }
}
私有类LongOperation扩展了异步任务
{
进展性帕金森病;
总尺寸长;
@凌驾
受保护的void onPreExecute()
{
pd=新进度对话框(本);
pd.setProgressStyle(ProgressDialog.STYLE_水平);
设置消息(“请稍候…”);
pd.可设置可取消(假);
pd.show();
}
@凌驾
受保护的SomeReturnObject doInBackground(HttpResponse…arg0)
{
//在这里进行长时间运行操作
}
@凌驾
受保护的void onProgressUpdate(整数…进度)
{
//如果您有一个长时间运行的进程,并且该进程有一定的进展
pd.setProgress((int)(progress[0]);
}
@凌驾
PostExecute上受保护的void(SomeReturnObject o)
{
pd.解散();
}
}

从上面的代码中,它实际上是在Thread run()方法中显示对话框并立即关闭它。如果你真的想看看它是否显示了Thread.sleep(2000)来测试,但是John Russell说的是使用AsyncTask的方法