ProgressDialog不会显示。再次

时间:2012-02-21 02:50:15

标签: android progressdialog

我很困惑,因为这在我的其他活动中一直很好用,在这里我只是基本上复制粘贴代码,但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();               
         }
}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您应该使用AsyncTask来管理长时间操作。

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();
    }
}

答案 2 :(得分:0)

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