2012-02-21 115 views
-2

我很困惑,因为这对我来说在其他活动中相当不错,在这里我只是基本上复制粘贴了代码,但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();    
     } 
} 

回答

1

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

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

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