欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Android应用中ListView实现多条数据同时倒计时功能,androidlistview,最近在做一个网购APP,

来源: javaer 分享于  点击 22983 次 点评:36

Android应用中ListView实现多条数据同时倒计时功能,androidlistview,最近在做一个网购APP,


最近在做一个网购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,也可以把结束时间-1serverTime = Long.valueOf(mMyMatchList.get(i).getServerDate());pmAdapter.notifyDataSetChanged();}}}};@Overrideprotected 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() {@Overridepublic void run() {Message message = Message.obtain();message.what = 1;mHandler.sendMessage(message);}};timer.schedule(timerTask, 1000, 1000);}@Overrideprotected void onResume() {super.onResume();}@Overrideprotected 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 + "秒";}
相关栏目:

用户点评