关于Handler的使用,如何使用Handler更新进度条

3 篇文章 0 订阅
1 篇文章 0 订阅

二话不说先看看运行效果。

先看一下main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="220dp"
        android:layout_height="wrap_content" 
        />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始" />

</LinearLayout>

在来看一下java代码

package leilei.handler.bar;

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 BarHandlerActivity extends Activity {
    /** Called when the activity is first created. */
	private Button startButton;
	private ProgressBar progressBar;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        progressBar = (ProgressBar)findViewById(R.id.progressBar1);
        startButton = (Button)findViewById(R.id.button1);
        startButton.setOnClickListener(new ButtonListener());
        }
    class ButtonListener implements OnClickListener{

		@Override
		public void onClick(View v) {
		handler.post(updaterunnable);	
		}
    }
    Handler handler = new Handler(){
    	@Override
    	public void handleMessage(Message msg) {
    		progressBar.setProgress(msg.arg1);
    		handler.post(updaterunnable);
    	}
    };
    
    Runnable updaterunnable = new Runnable() {
		int i = 0;
		@Override
		public void run() {
			// TODO Auto-generated method stub
			System.out.println("start bar");
			i = i + 10;
			Message msg = handler.obtainMessage();
			msg.arg1 = i;
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			handler.sendMessage(msg);
			if(i == 100){
				handler.removeCallbacks(updaterunnable);
			}
		}
	};

}

关于进度条的使用的更新方法:

1.首先创建Handler对象

Handler handler = new Handler 

2.创建Handler后调用handler.post(updaterunnable)方法把添加到消息队列中

3.更新进度条当然要用到线程,接下来该创建线程了。

Runnable updaterunnable = new Runnable()
线程里run方法里就是我们要更新的具体实现了。

run里的message方法

官方API解释如下:message是定义一个包含任意对象任意数据的对象,这个对象可以发送到Handler中,上面代码中

handler.sendMessage(msg);把msg 作为参数发送出去,那么发送出的是数据被谁接收呢?

接着看,在Handler中progressBar.setProgress(msg.arg1);进度条接收了这个参数,i每次自加10,所以进度条每次自动前进10个单位,

要想实现进度条循环前进,所以还要再一次在Handler方法中调用handler.post(updaterunnable);把线程假如到消息队列中,

看程序整理思路,点击Button会触发监听器,监听器会把发线程作为一个对象发送到Handler对象中,(队列是先进先出,犹如汽车过隧道,一定是顺序的进出。)

接下来程序跳转到Thread那,在线程里的run方法里就不用多说了,里面会声称一个msg消息传递给进度条,进度条progressBar会在Handler的匿名内部类里被接受,随后再次调用handler.post(updaterunnable);方法把线程再一次放Handler进队列中,因此能实现循环更新。说的不够相信,希望对大家都有帮助。


有什么不明白的可以关注我的新浪微博哦  欢迎大家一起讨论  http://weibo.com/419768151


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值