Android應用中ListView實現多條數據同時倒計時功能
最近在做一個網購APP,有個小功能就是限時搶購商品在限定時間內有優惠活動,我們需要給每個件商品做一個倒計時顯示告訴用戶還剩下多少時間。項目中我 們有用到ListView和GridView來加載我們的商品數據,對每條數據(對應一件商品)進行倒計時。倒計時實現方式很多,常用的有以下方式:
1,采用Handle與線程的sleep(long)
2,采用Handler的postDelayed(Runnable, long)方法
3,采用Handler與timer及TimerTask結合的方法
當然還有其它的方法,雖然功能簡單,但是我在實現過程中也有一小點問題,就是開始實現了計時,但是每當上下拉刷新時,時間就會錯亂。后來經過調整,終于實現了所要的效果。下面講下我用到的實現方式,還有另外一種方式類似,只是把hander及時間 處理放到adapter中了,用的Handler+Timer+TimerTask實現的:
Activity中代碼:
public class ShopActivity extends Activity { private ListView lv; private ShopAdapter pmAdapter; private Timer timer = new Timer(); private TimerTask timerTask; private List<MyData> dataList; @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { if (msg.what == 1) { for (int i = 0; i < mMyMatchList.size(); i++) { dataList.get(i).setServerDate(Long.valueOf(dataList.get(i).getServerDate())+ 1 + "");//這是服務器當前時間,以此時間為基數進行倒時計,因為服務器時間以秒為單位返回,所以我們每隔1秒,把當前服務器時間+1,也可以把結束時間-1 serverTime = Long.valueOf(mMyMatchList.get(i).getServerDate()); pmAdapter.notifyDataSetChanged(); } } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_shop); dataList=new ArrayList<MyData>();//接下來要從服務端取到數據,加入dataList中 lv= (ListView) this.findViewById(R.id.shop_lv); pmAdapter = new ShopAdapter(ShopActivity.this, this); lv.setAdapter(pmAdapter); timerTask = new TimerTask() { @Override public void run() { Message message = Message.obtain(); message.what = 1; mHandler.sendMessage(message); } }; timer.schedule(timerTask, 1000, 1000); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { if (null != timer) { timer.cancel(); } super.onDestroy(); } }
最后在適配器類ShopAdapter中,根據服務器返回的商品優惠截止時間和服務器時間,把數據加上去就可以了:
TextView timeTv=findViewById(); timeTv.setText(getTimeFromInt(結束時間-服務器時間)); getTimeFromInt這個方法是計算時間差并轉換成所需要格式的: public String getTimeFromInt(long time) { if (time <= 0) { return "已結束"; } long day = time / (1 * 60 * 60 * 24); long hour = time / (1 * 60 * 60) % 24; long minute = time / (1 * 60) % 60; long second = time / (1) % 60; return "還剩:" + day + "天" + hour + "小時" + minute + "分" + second + "秒"; }
本文由用戶 wgd7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!