Android应用中ListView实现多条数据同时倒计时功能
来源:互联网 发布:java cookie path设置 编辑:程序博客网 时间:2024/06/07 01:24
最近在做一个网购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 = newShopAdapter(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 + "秒";
}
- Android应用中ListView实现多条数据同时倒计时功能
- Android进阶之ListView实现多条数据同时倒计时功能
- ListView中同时开启多个倒计时
- ListView实现倒计时功能
- ListView倒计时功能实现
- ListView实现倒计时功能
- Android ListView倒计时功能
- mysql 中实现多条数据同时更新
- android开发中倒计时功能的实现
- Android开发中倒计时功能的实现
- android中使用Rxjava实现倒计时功能
- android 实现倒计时功能
- Android倒计时功能实现
- android实现倒计时功能
- Android 倒计时功能实现
- Android实现倒计时功能
- Android倒计时(ListView/Gridview中多个倒计时同时进行)
- android中倒计时功能
- 对Layer 进行操作时设置masks 为YES 的 前因后果
- C语言中的static 详细分析
- 慕课网app下拉刷新图标填充效果的实现
- 抽象工厂模式
- 4.1编写函数strindex(s,t)它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。
- Android应用中ListView实现多条数据同时倒计时功能
- 解决Python运行时报错SyntaxError: Non-ASCII character
- sqlite expert 教程
- c++构造函数必须用到初始化成员列表的四种情况
- IDEA 和svn安装和配置
- 异常机制第三十七课,声明异常throw,方法重写中异常的处理,手动抛出异常
- CSS样式源码(案列)---------------------------持续更新,欢迎大家补充分享
- LeetCode:Longest Substring Without Repeating Characters
- tail时报No space left on device