该工程的功能是实现点击按钮进度条按10%递增,使用的方式是Handler
以下的代码是MainActivity.java中的代码
package com.example.progressbarhandler; 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 MainActivity extends Activity { //申明变量 ProgressBar bar = null; Button startButton = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //根据空间的ID得到代表控件的对象,并未按钮去设置监听器 bar = (ProgressBar)findViewById(R.id.bar); startButton = (Button)findViewById(R.id.startButton); startButton.setOnClickListener(new ButtonListener()); } class ButtonListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub bar.setVisibility(View.VISIBLE); updateBarHandler.post(updateThread); } } //使用匿名内部类来复写Handler当中的handMessage方法 Handler updateBarHandler = new Handler(){ public void handleMessage(Message msg){ bar.setProgress(msg.arg1); //线程队列 updateBarHandler.post(updateThread); } }; //线程类,该类使用匿名内部类的方式进行声明 Runnable updateThread = new Runnable(){ int i = 0; public void run(){ System.out.println("Begin Thread"); i = i + 10; //得到一个消息对象,message类是由android操作系统提供 Message msg = updateBarHandler.obtainMessage(); //将msg对象的arg1参数的值设置为i,用arg1和arg2这两个成员传递消息 msg.arg1 = i; try{ //设置当前显示睡眠1秒 Thread.sleep(1000); } catch (InterruptedException e){ e.printStackTrace(); } //将msg对象加入到消息队列当中 updateBarHandler.sendMessage(msg); if(i == 100){ //如果当i的值为100时,就将线程对象从handle当中移除 updateBarHandler.removeCallbacks(updateThread); } } }; }
以下的代码是activity_main.xml中的代码
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="${relativePackage}.${activityClass}" > <ProgressBar android:id="@+id/bar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="200dp" android:layout_height="wrap_content" android:visibility="gone" /> <Button android:id="@+id/startButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="start" /> </LinearLayout>