2

我有一个按钮,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);
     }
    };
      };
4

3 回答 3

1

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

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

另外,我建议您将AsyncTask用于任何后台工作。请参见此处的示例。

于 2011-02-01T14:28:10.917 回答
1

实际上,我会用 来实现这一点AsyncTask,您可以在其中启动进度条,在onPreExecute()中取消它并在 中onPostExecute()进行下载doInBackground()。如果你想更新进度值,你可以publishProgress()doInBackground()其中然后可以在 ProgressBar 中更新onProgressUpdate()

https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L328 展示了如何使用这些方法并显示/隐藏进度条(pg变量)

于 2011-02-01T14:28:50.310 回答
0

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

一般来说,我认为您不需要在活动之间设置进度条,因为它们应该可以非常顺利地在它们之间切换。我通常会在 Activity 完全呈现之前使用进度条来加载数据。

也许你应该看看 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

于 2011-02-01T14:37:20.460 回答