综合网上的一些,自己写了个,不想改了,凑合着看吧,根据自己的需求自己改吧
Activity
public class MainActivity extends Activity {
private ListView lv1;
private HAdapter adapter;
private ArrayList<Datashuju> sj;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv1 = (ListView) findViewById(R.id.lv1);
sj= getData();
for(Datashuju data : sj){//对数据处理,
data.isTimer = compareTime(data);
}
adapter = new HAdapter(MainActivity.this,sj);
adapter.setListView(lv1);
lv1.setAdapter(adapter);
adapter.start();
}
@Override
protected void onDestroy() {
Log.e("url", "Destroy");
adapter.removeshuju();
super.onDestroy();
}
//初始化一些数据
private ArrayList<Datashuju> getData(){
ArrayList<Datashuju> shuju = new ArrayList<Datashuju>();
int a = 0;
for(a =0;a<100;a++){
Datashuju d = new Datashuju();
if(a == 1){
d.setS("2015-12-09 05:05:05");
d.setE("2015-12-08 06:06:06");
d.setType("111");
} else if(a == 2){
d.setS( "2015-12-02 05:05:05");
d.setE("2015-12-08 06:06:06");
d.setType("222");
} else {
d.setS( a + "在");
d.setTime("0");
d.setType(a+""+a+a);
}
shuju.add(d);
}
return shuju;
}
private boolean compareTime(Datashuju d){
if(null != d.s && null != d.e){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
try {
c1.setTime(df.parse(d.s));//当前时间
c2.setTime(df.parse(d.e));//截止时间
} catch (ParseException e) {
e.printStackTrace();
}
int result = c1.compareTo(c2);
if(result == 0){
return false;
} else if(result < 0){
//c1小于c2
return true;
} else if(result > 0){
//c1大于c2
return false;
}
}
return false;
}
}
adapter
public class HAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<Datashuju> shuju;
ViewHolder holder = null;
private TextView tv1, tv2;
private int time;
private ListView mListView;
public HAdapter(Context context, ArrayList<Datashuju> data){
mContext = context;
shuju = data;
}
public void setListView(ListView listView){
this.mListView = listView;
}
@Override
public int getCount() {
return shuju == null ? 0 : shuju.size();
}
@Override
public Object getItem(int position) {
return shuju.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null){
holder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_view,null);
holder.tv1 = (TextView) convertView.findViewById(R.id.tv1);
holder.tv2 = (TextView) convertView.findViewById(R.id.tv2);
holder.tv3 = (TextView) convertView.findViewById(R.id.tv3);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
Datashuju bean = shuju.get(position);
holder.tv1.setText(bean.type);
holder.tv2.setText(bean.s);
holder.tv3.setText(bean.time);
return convertView;
}
/**用来更新时间,只有当前的item可见时,才去跟新倒计时*/
private void updateTime(){
if(mListView !=null){
int start = mListView.getFirstVisiblePosition();
for(int i=start, j=mListView.getLastVisiblePosition();i<=j;i++)
if( ((Datashuju)mListView.getItemAtPosition(i)).isTimer){
View view = mListView.getChildAt(i-start);
ViewHolder holder = (ViewHolder) view.getTag();
holder.tv3 = (TextView)view.findViewById(R.id.tv3);
holder.tv3.setText(shuju.get(i).time);
}
}
}
public class ViewHolder{
TextView tv1;
TextView tv2;
TextView tv3;
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what ==1) {
updateTime();
}
}
};
int result = 0;
private Thread thread;
public void start() {
thread = new Thread() {
public void run() {
while (true) {
try {
result++;
if (null == shuju ) {
break;
}
if(shuju.size() == 0){
break;
}
sleep(1000);
Log.e("url", "uu");
if(null != shuju ) {
for (Datashuju data : shuju) {
if(data.isTimer){
data.time = daojishi(data,result);
}
handler.sendEmptyMessage(1);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
thread.start();
}
public void removeshuju(){
if(null != shuju){
shuju.clear();
}
shuju = null;
}
public String daojishi(Datashuju datasj,int i){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long MIAO = 1000;
Date one;
Date two;
long days = 0;
long hours = 0;
long min = 0;
long sec = 0;
try {
one = df.parse(datasj.s);
two = df.parse(datasj.e);
long time1 = one.getTime();
long time2 = two.getTime();
long diff = time2 - time1 - i * 1000;
if( 0 == diff){
// mContext.sendBroadcast();
}
days = diff / (1000 * 60 * 60 * 24);
hours = diff / (1000 * 60 * 60) - days * 24;
min = (diff / (1000 * 60)) - days * 24 * 60 - hours * 60;
sec = diff / 1000 - days * 24 * 60 * 60 - hours * 60 * 60 - min * 60;
String s = days + "天" + hours + "时" + min + "分" + sec + "秒";
return s;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
实体类
public class Datashuju {
public String time;
//开始时间
public String s;
//截止时间
public String e;
//是否需要倒计时
public boolean isTimer ;
public String type;
public String getE() {
return e; }
public void setE(String e) {
this.e = e; }
public String getType() {
return type; }
public void setType(String type) {
this.type = type; }
public void setTime(String time) {
this.time = time; }
public void setS(String s) {
this.s = s; }
public String getS() {
return s; }
public String getTime() {
return time; }
}