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());
}
当然实际开发中,时间肯定是后台返回的,但是倒计时的实现原理是一样的。<- - - ->小白的成长日记!
本文介绍了一种在ListView中实现倒计时的方法。通过使用单个Timer并定期更新适配器来显示各条目剩余时间。适配器计算每个条目的剩余时间并格式化为HH:MM:SS形式。
777

被折叠的 条评论
为什么被折叠?



