package com.example.androidtest;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class CountdownActivity extends Activity {
private ListView lv;
private ArrayList<Goods> goodss = new ArrayList<Goods>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_countdown);
lv = (ListView) findViewById(R.id.lv);
for(int i=0;i<20;i++){
goodss.add(new Goods(30000+i*1000, "时间"+i));
}
adapter = new CountTimeAdapter();
lv.setAdapter(adapter);
handler.sendEmptyMessage(1);
}
private class CountTimeAdapter extends BaseAdapter{
@Override
public int getCount() {
return goodss.size();
}
@Override
public Object getItem(int position) {
return goodss.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Goods goods = goodss.get(position);
if(convertView == null){
convertView = View.inflate(CountdownActivity.this, R.layout.item_counttime, null);
}
TextView nameTV = (TextView)convertView.findViewById(R.id.nameTV);
final TextView timeTV = (TextView)convertView.findViewById(R.id.timeTV);
nameTV.setText(goods.getName());
long seconds = goods.getTime()/1000;
timeTV.setText(seconds/(60)+"分"+seconds%60+"秒");
return convertView;
}
}
private Handler handler = new Handler(){
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1:
boolean isNeedCountTime = false;
//①:其实在这块需要精确计算当前时间
for(int index =0;index<goodss.size();index++){
Goods goods = goodss.get(index);
long time = goods.getTime();
if(time>1000){//判断是否还有条目能够倒计时,如果能够倒计时的话,延迟一秒,让它接着倒计时
isNeedCountTime = true;
goods.setTime(time-1000);
}else{
goods.setTime(0);
}
}
//②:for循环执行的时间
adapter.notifyDataSetChanged();
if(isNeedCountTime){
//TODO 然后用1000-(②-①),就赢延迟的时间
handler.sendEmptyMessageDelayed(1, 1000);
}
break;
}
}
};
private CountTimeAdapter adapter;
}
转载于:https://my.oschina.net/yaly/blog/397431