【问题标题】:ProgressDialog doesn't show up. AgainProgressDialog 不显示。再次
【发布时间】:2012-02-21 02:50:14
【问题描述】:

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

【问题讨论】:

    标签: android progressdialog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您应该使用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();
          }
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-08-13
          • 1970-01-01
          • 1970-01-01
          • 2020-01-26
          • 1970-01-01
          • 2014-07-25
          • 1970-01-01
          相关资源
          最近更新 更多