标签:
MainActivity的代码如下所示:
package com.abner.countdownforlistview; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv_goods; private GoodsAdapter adapter; private int result = -1; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == 1) { result = adapter.countDownTime(); if (result == 0) { handler.removeMessages(1); return; } else { adapter.notifyDataSetChanged(); handler.sendEmptyMessageDelayed(1, 1000); } } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv_goods = (ListView) findViewById(R.id.lv_goods); initData(); } private void initData() { List<Goods> goodsList = new ArrayList<>(); for (int i = 0; i < 15; i++) { Goods goods = new Goods(); goods.setGoodsName("这是商品名称:" + i); goods.setPrice(i * 26); goods.setTime(i % 3 == 0 ? i * 8 + 62 : 0); goodsList.add(goods); } adapter = new GoodsAdapter(this, goodsList); lv_goods.setAdapter(adapter); handler.sendEmptyMessageDelayed(1, 1000); } }
在这个MainActivity中,可以看到通过Handler实现了倒数功能,在为ListView设置完Adapter后即通过handler的sendEmptyMessageDelayed方法发送了一条消息,然后在handler的handleMessage方法中通过调用在adapter中声明的countDownTime方法对相应的对象集合进行遍历再设置相应的值,最后通过返回的result进行判断倒数是否已经结束,如果已经结束则移除消息,否则继续发送消息进行倒数操作。
ListView的GoodsAdapter的代码如下所示:
package com.abner.countdownforlistview; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; import static com.abner.countdownforlistview.R.id.tv_price; /** * Created by abner on 2016/5/6. */ public class GoodsAdapter extends BaseAdapter { private Context context; private List<Goods> goodsList; public GoodsAdapter(Context context, List<Goods> goodsList) { this.context = context; this.goodsList = goodsList; } @Override public int getCount() { return goodsList == null ? 0 : goodsList.size(); } @Override public Object getItem(int position) { return goodsList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(context).inflate(R.layout.lv_goods_item, null); holder.tv_goodsName = (TextView) convertView.findViewById(R.id.tv_goodsName); holder.tv_price = (TextView) convertView.findViewById(tv_price); holder.tv_time = (TextView) convertView.findViewById(R.id.tv_time); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } final Goods goods = goodsList.get(position); holder.tv_goodsName.setText(goods.getGoodsName()); holder.tv_price.setText("¥" + goods.getPrice()); final int time = goods.getTime(); if (time > 0) { holder.tv_time.setText(getTimeStr(time) + "后开始"); } else { holder.tv_time.setText("正在进行中..."); } return convertView; } class ViewHolder { TextView tv_goodsName; TextView tv_price; TextView tv_time; } private int result = -1; /** * 倒数,实时更新每个item的显示时间 * * @return */ public int countDownTime() { new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(1000); if (goodsList == null || result == goodsList.size() + 1) { result = 0; return; } result = 1; for (Goods goods : goodsList) { if (goods.getTime() == 0) { goods.setTime(0); result++; } else { goods.setTime(goods.getTime() - 1); } } } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); Log.i("test", "result==>" + result); return result; } /** * 格式化时间显示,格式为:XX分XX秒 * * @param timeDiff * @return */ public static String getTimeStr(int timeDiff) { int min = timeDiff / 60; int sec = timeDiff - min * 60; String result = ""; if (min == 0) { result = sec + "秒"; } else { result = min + "分" + sec + "秒"; } return result; } }
此时,在android中实现ListView或GridView中item的倒数功能就已经完成了。
android实现ListView或GridView中item的倒数功能
标签:
原文地址:http://blog.csdn.net/zhangjinhuang/article/details/51335056