进度条问题

时间:2011-02-01 14:14:30

标签: android progressdialog

我有一个按钮,onclick读取并向用户显示带有rss新闻的列表。我想添加一个进度条直到完成加载。我的问题是,如果我添加一个条,它首先正常工作,但如果我按下后退按钮,条形图再次启动,它不能停止。任何帮助或演示进度条的教程都将不胜感激。谢谢!

ProgressBar myProgressBar;
  int myProgress = 0;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main1);

  Button nea = (Button) findViewById(R.id.nea);
   nea.setOnClickListener(new View.OnClickListener() {
   public void onClick (View view) {
    setContentView(R.layout.bar);

     myProgressBar=(ProgressBar)findViewById(R.id.bar);

           new Thread(myThread).start();

    Intent myIntent = new Intent(view.getContext(), nea.class);
    startActivityForResult(myIntent, 0);
    }  
  });
}

private Runnable myThread = new Runnable(){    
    @Override
    public void run() {
     // TODO Auto-generated method stub
     while (myProgress<100){
      try{
       myHandle.sendMessage(myHandle.obtainMessage());
       Thread.sleep(1000);
      }
      catch(Throwable t){
      }
     }
    }

    Handler myHandle = new Handler(){

     public void handleMessage(Message msg) {
      // TODO Auto-generated method stub
      myProgress++;
      myProgressBar.setProgress(myProgress);
     }
    };
      };

3 个答案:

答案 0 :(得分:1)

问题是您没有恢复myProgress变量。在onCreate()的开头将其设置为0:

@Override
 public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main1);
  myProgress = 0; // <--- notice that statement.
  ...
 }

另外,我建议您使用AsyncTask进行任何后台工作。请参见示例here

答案 1 :(得分:1)

实际上,我会使用AsyncTask来实现此功能,您可以在onPreExecute()中启动进度条,在onPostExecute()中取消它,然后在doInBackground()中进行下载。如果您想更新进度值,可以publishProgress() doInBackground() onProgressUpdate(),然后可以在pg

中的ProgressBar上更新

https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L328 显示了使用这些方法并显示/隐藏进度条({{1}}变量)的AsyncTask的示例

答案 2 :(得分:0)

您的代码看起来不像您希望的那样工作。您希望在此活动与下一个活动(我的假设)之间显示一个进度条。根据您的代码现在的工作方式,看起来当前活动将启动一个显示进度条大约100秒的线程,但同时您正在加载第二个Activity。因此,如果在100秒之前,如果您点击后退按钮,您将返回原始活动,该活动仍显示进度条。

一般来说,我不认为你需要在活动之间有一个进度条,因为它们应该非常顺利地在它们之间交换。我通常会使用进度条加载数据,然后才能完全呈现活动。

也许你应该看一下ProgressBar上的一些Android文档:

http://developer.android.com/reference/android/widget/ProgressBar.html

http://developer.android.com/reference/android/app/ProgressDialog.html

http://developer.android.com/guide/topics/ui/dialogs.html