后台程序完成读数据——ProgressBar与Handler
ProgressBar与ProgressDialog一样,用来显示进度条。ProgressBar是进度条组件,可以在XML定义,为用户呈现操作的进度。
进度条组件一般跟handler配合使用。Handler主要用来接受子线程发送的数据,配合主线程更新UI。
下面实现一个Handler和ProgressBar配合使用的例子,在窗体上添加一个ProgressBar组件、一个TextView组件和一盒Buttonzujain ,
单击Button,修改ProgressBar的当前值,并在TextView中显示当前进度值。通过incounter对当前的进度值进行控制。
ProgressBarExample.java代码如下(用Android studio写的)
1 package com.example.lenovo.a1102; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Message; 6 import android.os.PersistableBundle; 7 import android.support.v7.app.AppCompatActivity; 8 import android.view.View; 9 import android.widget.Button; 10 import android.widget.ProgressBar; 11 import android.widget.TextView; 12 13 import java.sql.BatchUpdateException; 14 import java.util.logging.Handler; 15 import java.util.logging.LogRecord; 16 17 /** 18 * Created by Lenovo on 2015/11/2. 19 */ 20 public class progressBarExample extends AppCompatActivity{ 21 private TextView myTextView; 22 private Button myButton; 23 private ProgressBar myProgressBar; 24 public int inCounter=0; 25 26 //自定义Handler信息代码,用以作为识别事件处理 27 protected static final int STOP_Flag=0x100; 28 protected static final int THREADING_Flag=0x101; 29 30 @Override 31 public void onCreate(Bundle savedInstanceState) { 32 super.onCreate(savedInstanceState); 33 setContentView(R.layout.activity_main); 34 myButton=(Button)findViewById(R.id.download); 35 //获取名字为download的按钮组件 36 myTextView=(TextView)findViewById(R.id.showMes); 37 //获取名字为showMes的TextView组件 38 myProgressBar=(ProgressBar)findViewById(R.id.pb); 39 //获取名字为pb的ProgressBar组件 40 myButton.setOnClickListener(new View.OnClickListener() { 41 @Override 42 public void onClick(View v) { 43 myTextView.setText(R.string.start); 44 //设置按钮上的显示文字 45 myProgressBar.setVisibility(View.VISIBLE); 46 //设置myProgressBar为可见状态 47 myProgressBar.setMax(100); 48 //设置myProgressBar进度的最大值 49 myProgressBar.setProgress(0); 50 //设置当前值为0 51 myProgressBar.setIndeterminate(false); 52 //设置进度条为明确显示 53 new Thread(new Runnable() { 54 @Override 55 public void run() { 56 //如果进度到达100,则向Handler发送STOP_Flag消息 57 while(inCounter<=100) //计数器小于100,进度条发生变化 58 try{ 59 inCounter++; 60 Thread.sleep(100); //进程休眠0.1s 61 if(inCounter==100){ 62 Message m=new Message(); 63 //自定义一个Message对象 64 m.what=progressBarExample.STOP_Flag; 65 //自定义Message的消息 66 myMessageHandler.sendMessage(m); 67 break; 68 //向handler发送消息 69 } 70 else{ //不足100,则向handler发送THREADING_Flag消息 71 Message m=new Message(); 72 m.what=progressBarExample.THREADING_Flag; 73 myMessageHandler.sendMessage(m); 74 } 75 }catch (Exception e){ 76 e.printStackTrace(); 77 } 78 } 79 }).start(); 80 } 81 }); 82 } 83 84 85 android.os.Handler myMessageHandler=new android.os.Handler() { 86 @Override 87 public void handleMessage(Message msg) { 88 89 //根据传来的消息判断 90 switch (msg.what) { 91 case progressBarExample.STOP_Flag: 92 myTextView.setText("下载完毕"); 93 myButton.setText("下载完毕"); 94 //修改myText与myButton的字样 95 myProgressBar.setVisibility(View.GONE); 96 //设置进度条为不可见 97 Thread.currentThread().interrupt(); 98 //中断当前线程 99 break; 100 case progressBarExample.THREADING_Flag: 101 myProgressBar.setProgress(inCounter); 102 //修改进度值 103 myTextView 104 .setText(getResources().getText(R.string.start) 105 + "(" 106 + Integer.toString(inCounter-1) 107 + "%)\n" 108 + "progress:" 109 + Integer.toString(myProgressBar.getProgress()) 110 ); 111 break; 112 } 113 super.handleMessage(msg); 114 } 115 }; 116 }
layout/main.xml代码如下
1 <RelativeLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="fill_parent" 4 android:layout_height="wrap_content" 5 android:orientation="vertical"> 6 <ProgressBar 7 android:id="@+id/pb" 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 style="?android:attr/progressBarStyleHorizontal" 11 android:layout_margin="20dp" /> 12 <Button 13 android:id="@+id/download" 14 android:layout_width="wrap_content" 15 android:layout_height="wrap_content" 16 android:text="下载" 17 android:layout_marginTop="40dp" 18 /> 19 <TextView 20 android:id="@+id/showMes" 21 android:layout_width="fill_parent" 22 android:layout_height="wrap_content" 23 android:layout_marginTop="100dp" 24 25 /> 26 27 28 29 </RelativeLayout>
Strings.xml代码如下
1 <resources> 2 <string name="app_name">A1102</string> 3 4 <string name="start">开始下载……</string> 5 6 </resources>
用java编译器写的小伙伴,注意那个handler不要导错了~~~~~~之前我就是导错了,还一直找很久
android.os.Handler myMessageHandler=new android.os.Handler()
------------------------
没有谁的人生不是斩棘前行
----------------------------------------
JM