文档章节

如何在一段时间改变控件的状态(timeButton)

jacky_123
 jacky_123
发布于 2015/01/19 11:45
字数 338
阅读 19
收藏 0

通过Handler 及 handleMessage实现,代码如下,可以直接使用。

 

 count :指定多长时间后将mBtn_resend_code的enable状态设置为true。

originText:保存的是之前Button的text。

/**
  * 控件倒计时改变状态
  * @param v
  * @param time
  * @param origin
  */
 private void timeButton(final View v, final int time, final String origin) {
  // TODO Auto-generated method stub
  ((Button) v).setEnabled(false);
  final Handler handler = new Handler() {
   public void handleMessage(Message msg) {
    ((Button) v).setText(msg.arg1 + "秒后可重发");
    if (msg.arg1 == 0) {
     ((Button) v).setText(origin);
     ((Button) v).setEnabled(true);
    }
   }
  };
  new Thread() {
   int count = time;
   public void run() {
    while (count > 0) {
     Message msg = new Message();
     try {
      Thread.sleep(1000);
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
     count--;
     msg.arg1 = count;
     handler.sendMessage(msg);
    }
   }
  }.start();
 }

第二种方法:通过Handler及SendMessage来解决

//定义消息
 private static final int TIME_CHANGE = 0x110;
 int type;
 int mTime = Constant.TIME_LIMIT;
 Handler mHandler = new Handler() {
  public void handleMessage(Message msg) {
   type = msg.what;
   switch (type) {
   case TIME_CHANGE:
    mSendPhone.setText(mTime + "秒后可重发");
    mTime--;
    // 倒计时时间为0,不发送消息,初始化Button状态
    if (mTime == 0) {
     mHandler.removeMessages(TIME_CHANGE);
     //初始化到初始的时间值
     mTime = Constant.TIME_LIMIT;
     mSendPhone.setEnabled(true);
     mSendPhone.setText(originText);
    } else {
     mHandler.sendEmptyMessageDelayed(TIME_CHANGE, 1000);
    }
    break;
   }
  };
 };

© 著作权归作者所有

上一篇: Java中关键字说明
下一篇: 细谈AsyncTask
jacky_123
粉丝 3
博文 55
码字总数 26297
作品 0
南通
程序员
私信 提问
iOS开发之控件封装(又名拧螺丝):排序按钮

前言 排序按钮是实际开发中比较常见的一种控件,最近我也遇到了,鉴于只会拧螺丝的我有一段时间没写关于拧螺丝的文章了,为了找下存在感,今天简单分享下。 虽然功能简单,但是保证你看了不亏...

无夜之星辰
2018/09/30
0
0
iOS 横屏app,控件布局错误,奇怪的问题,旺解答

背景: 我在开发一个iOS横屏应用,该应用大部分页面都是横屏的,故xcode默认设置只支持横屏,只有在一个页面是支持竖屏(选择照片上传,因为系统原因,选择照片页面无法支持横屏,故在需要照...

xudehuai
2016/12/24
226
1
控件状态的保留(思考中的笔记)

统一保存? 在哪里保存比较合适?app?所有状态的改变通过event冒泡到顶层app? 如何标识控件? 1、控件的名称 + domainviewdscription.uid + fielddescription.fieldName?得到唯一的标识? ...

jianglibo
2014/07/01
52
0
笔记54 | 管理系统UI(二)

全屏沉浸式应用 这节课将教您 选择一种沉浸方式 使用非粘性沉浸模式 使用粘性沉浸模式 Adnroid 4.4(API level 19)中引入为引入了一个新标签,它可以让应用进入真正的全屏模式。当这个标签与和...

项勇
2017/12/20
0
0
【Visual Studio 扩展工具】如何在ComponentOneFlexGrid树中显示RadioButton

概述 在ComponentOne Enterprise .NET控件集中,FlexGrid表格控件是用户使用频率最高的控件之一。它是一个功能强大的数据管理工具,轻盈且灵动,以分层的形式展示数据(数据呈现更加直观)。...

葡萄城技术团队
2018/12/19
22
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
51分钟前
4
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
7
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
10
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
14
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部