第一个package com.Handler01;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;public class Handler01 extends Activity {
    /** Called when the activity is first created. */
private ProgressBar bar = null;
private Button button = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        /*控件ID*/
        bar = (ProgressBar)findViewById(R.id.Bar);
        button =(Button)findViewById(R.id.button1);
        /*绑定按钮*/
        button.setOnClickListener(new buttonListener());
    }
    
    /*创建Handler对象*/
    Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
bar.setProgress(msg.arg1);
myHandler.post(update);
}
    
    };
    
    /*设置按钮监听器*/
    class buttonListener implements OnClickListener{ @Override
public void onClick(View arg0) {
myHandler.post(update);
}
    
    }
    
    /*创建线程函数*/
    Runnable update = new Runnable() {
int i = 0;
@Override
public void run() {
i=i+5;
Message msg = myHandler.obtainMessage();
msg.arg1=i;
myHandler.sendMessage(msg); if (i==100){
System.out.println("done");
bar.setVisibility(View.GONE);
myHandler.removeCallbacks(update);
}

}
};
}在最后那个线程函数里,I的值为什么在多次调用的时候(比如myHandler.sendMessage(msg);),不会被赋初值0?
照我的理解,每当myHandler.post(update); 执行这个线程函数的时候,不是都有int i = 0;吗,这样的话就永远也加不到100.但这个程序是加到100的,最后也打印出信息的.后一个问题更简单的.
ProgressBar的progress如何清0,bar.setProgress(0);不行.

解决方案 »

  1.   

    1.Runnable update在整个activity的声明周期中只有一个。
    可以这样写,容易理解。
    public class Handler01 extends Activity {
        /** Called when the activity is first created. */
        private ProgressBar bar = null;
        private Button button = null;
        private Runnable update = null;
    ...
        update = new Runnable() {
    ...
    理解类只有一个update对象后,也就理解了每次执行update的run时,i的值就是上次计算后的值。2.setProgress(0)是这样赋值的,应该起作用。
     
      

  2.   

    update就只有一个。LZ是看完视频后,写的代码,这个视频我看过。
      

  3.   

    后一个问题更简单的.
    ProgressBar的progress如何清0,bar.setProgress(0);不行.
    这个问题我再试试
      

  4.   

    后一个问题更简单的.
    ProgressBar的progress如何清0,bar.setProgress(0);不行.
    这个问题我再试试