我们在使用适配器的时候 一般情况下都是放入各种控件 今天在使用中用到CountDownTimer突然一脸的懵逼 居然不知道怎么去设置(沃德天那么傻) 其实适配器的item内部是可以放进去任何东西的 结果被老大一说 特尴尬
class ViewHolder {
TextView textView;
//CountDownTimerUtil 控件以外的东西也可以拿到适配器item里面进行复用 不一定是控件哦
CountDownTimerUtil timer;
}
由于CountDownTimer在实时倒计时 我们的数据一般是要和服务器数据尽可能保持一致 上拉或者下拉适配器列表时不可能随时获取数据 所以我们保存下数据的获取时间
public class CountDownTimeInfo {
public long time;
// system 记录数据获取时间
public long system=System.currentTimeMillis();
}
接下来看下我们的适配器 由于获取数据显示数据时间差 所以适配器设置的时候应减去对应的时间差
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView=View.inflate(MainActivity.this, R.layout.item_main, null);
holder.textView = (TextView) convertView.findViewById(R.id.textview);
holder.timer=new CountDownTimerUtil(holder.textView, 0, 1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
CountDownTimeInfo info = mList.get(position);
//实际时间差 maxTime
long maxTime=info.time- (System.currentTimeMillis() - info.system)/1000;
if(maxTime<=0){
holder.textView.setText("倒计时结束!!!");
}else{
holder.timer.resetCountDownTimer(holder.te }
return convertView;
}
大家在设置CountDownTimer的时候可能会有疑惑 由于CountDownTimer没有给我们提供重新设置时间方法所以我们在重新设置时间的时候要把原先的CountDownTimer取消掉 重新去设置一个 不然的话就会出现两个或者多个CountDownTimer同时运行 也就是发现一秒钟不到时间 我们只要把原先的取消就可以
“`
public void resetCountDownTimer(final TextView view, long max, long interval) {
if (countDownTimer != null) {
countDownTimer.cancel();
}
if (max <= 0) {
view.setText("倒计时结束!!!");
return;
}
countDownTimer = new CountDownTimer(max * 1000, interval * 1000 - 10) {
@Override
public void onTick(long time) {
view.setText("提交倒计时 " + DateUtil.getHour3(time / 1000));
}
@Override
public void onFinish() {
view.setText("倒计时结束!!!");
}
};
countDownTimer.start();
}
“
如果有更好的处理方法欢迎留言指正 不胜感激
项目下载地址:http://download.csdn.net/detail/u010142034/9628505