ListView的倒计时
最近项目中要实现在ListView上一个倒计时的功能,根据服务器返回的数据,显示出倒计时。于是乎就写了一个Demo,功能很简单,先看看效果图!
实现起来其实并不麻烦,但是要清楚Timer只有一个,不是每个ListItem都有一个Timer,它是公用的,而Timer每隔1s就会让适配器刷新一次。
具体实现代码如下:
mAdapter = new TimeListAdapter(this, mTimes);
mTimeLv.setAdapter(mAdapter);
//开始Timer
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
mHandler.sendEmptyMessage(0);
}
}, 1000, 1000);
这里设置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());
}
当然实际开发中,时间肯定是后台返回的,但是倒计时的实现原理是一样的。<- - - ->小白的成长日记!