第一个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);不行.
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);不行.
可以这样写,容易理解。
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)是这样赋值的,应该起作用。
ProgressBar的progress如何清0,bar.setProgress(0);不行.
这个问题我再试试
ProgressBar的progress如何清0,bar.setProgress(0);不行.
这个问题我再试试