后台程序完成读数据——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     }
View Code

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>
View Code

Strings.xml代码如下

1 <resources>
2     <string name="app_name">A1102</string>
3 
4     <string name="start">开始下载……</string>
5 
6 </resources>
View Code

 

 

      用java编译器写的小伙伴,注意那个handler不要导错了~~~~~~之前我就是导错了,还一直找很久

      android.os.Handler myMessageHandler=new android.os.Handler()

 

 

   

posted @ 2015-11-02 20:42  白一  阅读(793)  评论(0编辑  收藏  举报