android handle实现倒计时

来源:互联网 发布:大数据学习 编辑:程序博客网 时间:2024/06/06 18:30

Android开发-02-ListView中给某些条目进行倒计时

2014-10-30 11:10

本文重点在ListView中使用倒计时

在Android的开发中,我们经常遇见倒计时的操作,通常使用Timer和Handler共同操作来完成。当然也可以使用Android系统控件CountDownTimer,这里简单操作一下这个控件:

new CountDownTimer(30000, 1000) {     public void onTick(long millisUntilFinished) {     timeTV.setText(": " + millisUntilFinished / 1000);     }     public void onFinish() {     timeTV.setText("done!");     } }.start();

这个操作起来比Timer要爽。

当然本文不是要展示这种简单的效果,在项目中遇见这样的问题,在ListView中添加倒计时,有的条目有倒计时的功能,有的条目没有倒计时的功能,这种方式该怎么实现呢?难道在Adapter里面,每个条目都添加如上的代码。如下所示:

public View getView(int position, View convertView, ViewGroup parent) {Goods goods = goodss.get(position);if(convertView == null){convertView = View.inflate(ListViewCountTimeDemo.this, R.layout.item_counttime, null);TextView nameTV = (TextView)convertView.findViewById(R.id.nameTV);final TextView timeTV = (TextView)convertView.findViewById(R.id.timeTV);nameTV.setText(goods.getName());timeTV.setText(goods.getTime()+"");new CountDownTimer(30000, 1000) {     public void onTick(long millisUntilFinished) {     timeTV.setText(": " + millisUntilFinished / 1000);     }     public void onFinish() {     timeTV.setText("done!");     } }.start(); }else{}return convertView;}

这种方式肯定有问题,每次获取一个新的条目,都会创建一个计时对象,这样在条目比较多的时候,来来回回上下滑动之后,就会出现计时紊乱。压根儿不是1秒1秒的走动。而且可能创建过多的CountDownTimer对象,导致内存消耗过大。

个人推荐使用下面这种方式:

package com.example.androidtest;import java.util.ArrayList;import android.app.Activity;import android.os.Bundle;import android.os.CountDownTimer;import android.os.Handler;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class CountdownActivity extends Activity {private ListView lv;private ArrayList<Goods> goodss = new ArrayList<Goods>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_countdown);lv = (ListView) findViewById(R.id.lv);for(int i=0;i<20;i++){goodss.add(new Goods(30000+i*1000, "zhangfei"+i));}adapter = new CountTimeAdapter();lv.setAdapter(adapter);handler.sendEmptyMessage(1);}private class CountTimeAdapter extends BaseAdapter{@Overridepublic int getCount() {return goodss.size();}@Overridepublic Object getItem(int position) {return goodss.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Goods goods = goodss.get(position);if(convertView == null){convertView = View.inflate(CountdownActivity.this, R.layout.item_counttime, null);}TextView nameTV = (TextView)convertView.findViewById(R.id.nameTV);final TextView timeTV = (TextView)convertView.findViewById(R.id.timeTV);nameTV.setText(goods.getName());long seconds = goods.getTime()/1000;timeTV.setText(seconds/(60)+"分"+seconds%60+"秒");return convertView;}}private Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case 1:boolean isNeedCountTime = false;//①:其实在这块需要精确计算当前时间for(int index =0;index<goodss.size();index++){Goods goods = goodss.get(index);long time = goods.getTime();if(time>1000){//判断是否还有条目能够倒计时,如果能够倒计时的话,延迟一秒,让它接着倒计时isNeedCountTime = true;goods.setTime(time-1000);}else{goods.setTime(0);}}//②:for循环执行的时间adapter.notifyDataSetChanged();<span style="color:#009900;">if(isNeedCountTime){//TODO 然后用1000-(②-①),就赢延迟的时间handler.sendEmptyMessageDelayed(1, 1000);}break;</span>}}};private CountTimeAdapter adapter;}
本文的重点,就是使用Handler延迟操作,来进行倒计时的操作。这样倒计时就完成了,上下滑动就不会出现紊乱的问题。

图片效果:

Android开发-02-ListView中给某些条目进行倒计时0

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 退货退款单号填错了退不了款怎么办 淘宝退货退款快递单号填写错怎么办 蘑菇街退货忘记填快递单号了怎么办 您尝试购买的项目已停止供货怎么办 oppo新手机搬家搬了一半怎么办 开手机店手机卖不出去怎么办 京东买的东西误按签收了怎么办 小米5x充电宝充电自动断电怎么办 小米2s开不了机怎么办充电闪红灯 寄快递写错地址但已经发货了怎么办 拼多多发货时快递公司写错了怎么办 千牛发货信息写错了怎么办 发货物流单电话写错了怎么办 顺丰寄电脑保价后电脑进水了怎么办 微销通分享小程序没有二维码怎么办 京东的东西退掉但是赠品怎么办 买手机7天不给退换怎么办 买的水果拒收了商家不退钱怎么办 京东第三方签收后退货怎么办 京东上买的第三方的鞋子退货怎么办 淘宝买家退货条码不符签收了怎么办 此苹果已丢失并被抹掉怎么办 苹果手机显示已丢失并被抹掉怎么办 手机在保修期内坏了售后拖延怎么办 微信图片在电脑上打印不清楚怎么办 遇到职业搞坏淘宝店铺的买家怎么办 眼破裂伤无光感半个月怎么办 出了虫的豆豆熬稀饭喝了怎么办? 果汁阳台月季叶子掉光了怎么办 近看好看远看难看该怎么办 衣服褶皱没有熨斗的情况下怎么办 裤子磨得发亮怎么办也没有电熨斗 老是在灯箱拍照对眼睛不好怎么办 电信光纤宽带账号密码忘记了怎么办 遇到尴尬的事情自己缓不过来怎么办 注销微信账号显示非法请求怎么办 微信备份以前的被覆盖了怎么办 之前微信号被新微信号覆盖了怎么办 微信发出的消息变成绿色怎么办 收了客户的资金被骗走了怎么办 淘宝退回去的衣服店家不接收怎么办