zoukankan      html  css  js  c++  java
  • 后台程序完成读数据——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                                             + "%)
    "
    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()

       

  • 相关阅读:
    删除 AP 发票相关脚本
    js框架简明
    16 款最流行的 JavaScript 框架
    八款你不得不知的开源前端JS框架
    ExtJS面向对象
    js6类和对象
    js模拟类
    js实现继承
    Html中各种空格的显示
    常用快速原型设计工具大比拼、原型设计工具哪个好用
  • 原文地址:https://www.cnblogs.com/Lynn0814/p/4931322.html
Copyright © 2011-2022 走看看