实现起来其实并不麻烦,但是要清楚Timer只有一个,不是每个ListItem都有一个Timer,它是公用的,而Timer每隔1s就会让适配器刷新一次。 具体实现代码如下:
这里设置Timer每隔1s发送一个消息,然后在Handler里面对适配器进行刷新,如下:
PRivate Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { //刷新适配器 mAdapter.notifyDataSetChanged(); }};而在Adapter中,只是用时间减去当前时间,然后计算出剩余时间,
long time = mData.get(position);long surplusTime = time - System.currentTimeMillis();if (surplusTime <= 0) { holder.mTimeTv.setText("00:00:00");} else { setTextDesc(holder.mTimeTv, surplusTime / 1000);}private void setTextDesc(TextView mTextView, long surplusTime) { mTimeSb.delete(0, mTimeSb.length()); long hour = surplusTime / 3600; long minute = (surplusTime - hour * 3600) / 60; long second = surplusTime - hour * 3600 - minute * 60; if (hour < 10) { mTimeSb.append("0"); } mTimeSb.append(hour); mTimeSb.append(":"); if (minute < 10) { mTimeSb.append("0"); } mTimeSb.append(minute); mTimeSb.append(":"); if (second < 10) { mTimeSb.append("0"); } mTimeSb.append(second); mTextView.setText(mTimeSb.toString());}当然实际开发中,时间肯定是后台返回的,但是倒计时的实现原理是一样的。<- - - ->小白的成长日记!
新闻热点
疑难解答