介绍
怎么在Android中实现列表倒计时?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
CountDownTimer类用法
,, private CountDownTimer timer =, new CountDownTimer (30000,, 1000), {, ,,,//根据间隔时间来不断回调此方法,这里是每隔1000毫秒调用一次 ,,,@Override ,,,public void onTick (long millisUntilFinished), {, ,,,,,//todo millisUntilFinished为剩余时间,也就是30000,安康;n * 1000 ,,,}, ,,,, ,,,//结束倒计时调用,, ,,,@Override ,,,public void onFinish (), {, ,,,,//todo ,,,}, },,//开始倒计时 timer.start ();//取消倒计时(译者:取消后,再次启动会重新开始倒计时) timer.cancel ();。
<强>代码实现强>
先看核心,也就是CountDownAdapter类,这里就简化UI,每个项目只有一个textView来显示倒计时,布局XML就不放了,直接放代码
class CountDownAdapter (private var 活动:,ListActivity,, private var 数据:,ArrayList,, private var systemDate:,日期),:,BaseAdapter (), { private 才能val timeMap =, HashMap () private 才能val handler =,处理程序() private 才能val runnable =, object :, runnable { ,,,override fun 运行(),{ ,,,,,if (systemDate !=, null), { ,,,,,,,systemDate.time =systemDate.time +, 1000 ,,,,,,,Log.i (“xujf",,“服务器时间线程===,,+,systemDate +,“====? +,) ,,,,,,,handler.postDelayed (,, 1000) ,,,,,} ,,,} ,,} init {才能 ,,,handler.postDelayed (runnable, 1000) ,,} override 才能;fun  getView(位置:Int, convertView:, ?,,父母:,ViewGroup ?):, View { ,,,var v:视图 ,,,var 标签:ViewHolder ,,,var vo =,数据(位置) ,,,if (null ==, convertView), { ,,,,,v =, activity.layoutInflater.inflate (R.layout.item_count_down,,空) ,,,,,tag =, ViewHolder (v) ,,,,,v.tag =,标签 ,,,},{else ,,,,,v =convertView ,,,,,tag =, v.tag as ViewHolder ,,,} ,,,//获取控件对应的倒计时控件是否存在,,存在就取消,,解决时间重叠问题 ,,,var tc:, MyCountDownTimer ?,=, timeMap [tag.tvTime] ,,,if (tc !=, null), { ,,,,,tc.cancel () ,,,,,tc =零 ,,,} ,,,//计算时间差 ,,,val time =, getDistanceTimeLong (systemDate, vo) ,,,//创建倒计时,与控件绑定 ,,,val cdu =, MyCountDownTimer(位置,,,,1000,,tag.tvTime) ,,,cdu.start () ,,,//[醒目]此处需要映射集合将控件和倒计时类关联起来 ,,,timeMap.put (tag.tvTime, cdu) ,,,return v ,,} ,/* * ,,*,退出时清空所有项目的计时器 ,,*/fun 才能;cancelAllTimers (), { ,,,var 销售:,Set 祝辞?,=timeMap.entries ,,,var 它:,Iterator<*祝辞?,=,年代! ! .iterator () ,,,while (! ! .hasNext ()), { ,,,,,try { ,,,,,,,val pairs =, it.next (), as MutableMap.MutableEntry<*, *比; ,,,,,,,var cdt:, MyCountDownTimer ?,=, pairs.value as MyCountDownTimer ,,,,,,,cdt ! ! .cancel () ,,,,,,,cdt =零 ,,,,,},catch (e:例外),{ ,,,,,} ,,,} ,,,it =零 ,,,s =零 ,,,timeMap.clear () ,,} null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null 怎么在Android中实现列表倒计时