zoukankan      html  css  js  c++  java
  • android handler 基本使用 2


               示例2 Handler操作进度条

               

                  在Android布局文件中添加ProgressBar Button,并设置属性、参数

                  

                   创建Handler对象,以匿名内部类的方式,重写Handler对象的handlerMessage(Message msg)方法

                                    

                   

    Handler handler = new Handler() {

            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                
    //
                int t = msg.arg1;
                progressBar.setProgress(t);
                handler.post(proThread);

                // 标记2 详见后面解释
                if (t == 100) {
                    handler.removeCallbacks(proThread);
                }
                super.handleMessage(msg);
            }
        };

                   Button 的监听器
    handlerButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    progressBar.setVisibility(View.VISIBLE);

                    //将要执行的线程对象放入到队列当中 

                    handler.post(proThread); //proThread 匿名内部类方式创建的Runnable对象
                }
            }); 

     

                   创建Runnable对象

                     

    // 进度条线程 使用匿名内部类
        Runnable proThread = new Runnable() {
            int i = 0;//进度条的值

            @Override
            public void run() {
                // TODO Auto-generated method stub

                i = i + 10;
                System.out.println("ProBar Thread_" + i);
                // 得到消息对象
                Message msgMessage = handler.obtainMessage();
                msgMessage.arg1 = i; //设置成员变量arg1
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
                handler.sendMessage(msgMessage);

                // 无法删除 不清楚原因,在 标记2 处删除
                if (i == 100) {
                    handler.removeCallbacks(proThread);
                }
            }
        };

                   

               

  • 相关阅读:
    Asp.net中利用ExecuteNonQuery()执行存储过程返回1解决方案
    在workflow中,无法为实例 ID“...”传递接口类型“...”上的事件“...” 问题的解决方法。
    jquery获取一个table中的一行的每个td的内容
    自动ping博客服务程序
    总结JavaScript(Iframe、window.open、window.showModalDialog)父窗口与子窗口之间的操作
    sql server try...catch使用
    IAsyncResult异步设计
    jquery 判断一个对象是否存在
    数据库表扩展字段设计思路
    REST接口POST方法发送文件到服务器(C#)
  • 原文地址:https://www.cnblogs.com/lpe110/p/2442527.html
Copyright © 2011-2022 走看看