公司暂时不忙,看了许许多多的博客,今天突发想写个博客的念头。

在公司的一个项目中,有一个类似大部分商城都有的"限时秒杀"的倒计时功能,先上图,动图不知道怎么搞(尴尬不知道怎么放图,找了好久)

先来说说实现原理: 后台是返回了一个结束时间(是一个日期);

我的想法是 我获取系统的当前时间-后台的返回时间=还有多少时间结束。

上代码,写得不好,请原谅

1.时间的处理

 //获取当前时间  进行相减long currentTime = System.currentTimeMillis();//转成DateDate date = new Date(currentTime);//获取当前时间戳date.getTime();//定义 yyyy-MM-dd HH:mm:ss的格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格林尼治+或-df.setTimeZone(TimeZone.getTimeZone("GMT+8"));Date date1;//最长的时间long max = 0;try {for (int i = 0; i < miaoShaBean.data.size(); i++) {//转换成yyyy-MM-dd HH:mm:ssdate1 = df.parse(miaoShaBean.data.get(i).end_date);//计算出Long类型的  还有多少时间long time = date1.getTime() - date.getTime();//工具类转换成 *天*时*分*秒Log.e("剩余多少时间", Date_Utils.longToString(time));//修改成Long的样子 方便减1miaoShaBean.data.get(i).end_date = time + "";//因为是RecyclerView 所以肯定有多个item 我这里获取了//最长的时间,我只使用一个计时器,用最长的倒计时进行计时就可以了if (max < time) {max = time;}}} catch (ParseException e) {e.printStackTrace();}

上面的代码都有注释

Date_Utils.longToString(time)

这里是将long类型的time转成天时分秒并打印出来看看 方法如下

 public static String longToString(long data) {long D = data/(24*60*60*1000);long H = (data%(24*60*60*1000))/(60*60*1000);long M = (data%(24*60*60*1000)%(60*60*1000))/(60*1000);long S = (data%(24*60*60*1000)%(60*60*1000)%(60*1000))/1000;String str =D+"天"+H+"时"+M+"分"+S+"秒";return str;}

2.设置适配器 方法1已经把后台返回的结束时间转换成long的字符串 在设置数据的时候用那个longToString显示成天时分秒

 //new 一个适配器miaosha_adapter = new HorizontalListAdapter(getActivity(), miaoShaBean.data);//设置适配器miaosha_list.setAdapter(miaosha_adapter);

3.设置倒计时

 //开始计时器 每秒减一 这里的计时器只对 还没结束的商品进行倒计时 Adapter里面的计时器队商品结束计时做改动new CountDownTimer(max, 1000) {@Overridepublic void onTick(long millisUntilFinished) {// Log.v("CountDownTimerTest", "onTick millisUntilFinished = " + millisUntilFinished);//for循环Bean里面的每个item数据for (int i = 0; i < miaoShaBean.data.size(); i++) {//HP-1if (!miaoShaBean.data.get(i).end_date.equals("已结束"))//对没有结束的倒计时进行-1秒的操作//在方法一中已经对end_date做了long类型的字符串转换 所以这里直接可以Long.valueOf转成longmiaoShaBean.data.get(i).end_date = Long.valueOf(miaoShaBean.data.get(i).end_date) - 1000 + "";}//刷新适配器  ----一定要对源数据进行修改 刷新才有用miaosha_adapter.notifyDataSetChanged();}@Overridepublic void onFinish() {//Log.v("CountDownTimerTest", "onFinish");}}.start();

4.到这里其实已经完成了倒计时,做一下结束处理,在Adapter里面设置计时器,做每个item结束计时后的操作

主要是exeTimer()这个方法

/*** Created by 傀儡偶段 on 2018/4/13.*/public class HorizontalListAdapter extends BaseAdapter {private Context context;private List<MiaoShaBean.result_data> list;private long max = 0;private boolean flag = true;private CountDownTimer cdt=null;public HorizontalListAdapter(Context context, List<MiaoShaBean.result_data> xlist) {this.context = context;this.list = xlist;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder vh = new ViewHolder();if (convertView == null) {convertView = View.inflate(context, R.layout.horizontallistview_item, null);vh.discount = convertView.findViewById(R.id.b1_miaosha_discount);vh.img = convertView.findViewById(R.id.b1_miaosha_img);vh.name = convertView.findViewById(R.id.b1_miaosha_name);vh.time = convertView.findViewById(R.id.b1_miaosha_time);vh.price = convertView.findViewById(R.id.b1_miaosha_price);convertView.setTag(vh);} else {vh = (ViewHolder) convertView.getTag();}Glide.with(context).load(list.get(position).goods_img).into(vh.img);exeTimer(list.get(position).end_date.equals("已结束")?0:Long.valueOf(list.get(position).end_date), position);vh.time.setText(list.get(position).end_date.equals("已结束")?"已结束":Date_Utils.longToString(Long.valueOf(list.get(position).end_date)));vh.name.setText(list.get(position).name);vh.discount.setText(list.get(position).team_discount==null? "未打折" : list.get(position).team_discount+"折");vh.price.setText("¥" + list.get(position).promote_price);return convertView;}private void exeTimer(long time, final int position) {new CountDownTimer(time, 1000) {@Overridepublic void onTick(long millisUntilFinished) {// Log.v("CountDownTimerTest", "onTick millisUntilFinished = " + millisUntilFinished);//list.get(position).gmt_end_time = millisUntilFinished + "";//notifyDataSetChanged();}@Overridepublic void onFinish() {//Log.v("CountDownTimerTest", "onFinish");list.get(position).end_date = "已结束";notifyDataSetChanged();}}.start();}class ViewHolder {ImageView img;TextView time;TextView name;TextView price;TextView discount;}public class MyCountDownTimer extends CountDownTimer {private int position;public MyCountDownTimer(long millisInFuture, long countDownInterval, int position) {super(millisInFuture, countDownInterval);this.position = position;}@Overridepublic void onTick(long millisUntilFinished) {// Log.v("CountDownTimerTest", "onTick millisUntilFinished = " + millisUntilFinished);// Log.v("CountDownTimerTest", "onTick millisUntilFinished = " + millisUntilFinished);list.get(position).end_date = millisUntilFinished + "";//if (position == 0) {notifyDataSetChanged();//}}@Overridepublic void onFinish() {//Log.v("CountDownTimerTest", "onFinish");list.get(position).end_date = "已结束";notifyDataSetChanged();}}}

里面的数据需要改成自己的

ListView和RecyclerView(通用)里面的时间倒计时相关推荐

  1. 【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView

    一 背景概述: ScrollView里嵌套ListView,一直是Android开发者(反正至少是我们组)最讨厌的设计之一,完美打破ListView(RecyclerView)的复用机制,成功的将Na ...

  2. Android ListView与RecyclerView对比浅析

    前言 RecyclerView是谷歌官方出的一个用于大量数据展示的新控件,可以用来代替传统的ListView,更加强大和灵活. 弄清楚RecyclerView是否有足够的吸引力替换掉ListView, ...

  3. Android 常见界面控件(ListView、RecyclerView、自定义View篇)

    Android 常见界面控件(ListView.RecyclerView.自定义View篇) 目录 3.3 ListView的使用 3.3.1 ListView控件的简单使用 3.3.2 常用数据适配 ...

  4. 安卓v7支持包下的ListView替代品————RecyclerView

    RecyclerView这个控件也出来很久了,相信大家也学习的差不多了,如果还没学习的,或许我可以带领大家体验一把这个艺术般的控件. 项目已经同步至github:https://github.com/ ...

  5. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d... 作者:黄宁源 一,背景 RecyclerView是谷歌官方出的一 ...

  6. ListView嵌套RecyclerView遇到的一些坑以及解决办法

    首先看下需求 要实现这个页面首先 我想到的是ListView嵌套RecyclerView,那么开动

  7. 倒计时或按任意键返回首页_超实用excel小技巧之时间倒计时及动态显示

    一寸光阴一寸金,寸金难买寸光阴.浪费时间就等于浪费生命,所以时间的重要性不言而喻.我们经常会为一些重要的日子倒计时,准备着重要时刻的来临,例如考试,纪念日等. 我在这里设置现在到国庆节日的时间倒计时, ...

  8. Android入门(九)| 滚动控件 ListView 与 RecyclerView

    文章目录 ListView 内置类型的简单运用 定制数据类型 提升效率 点击事件 RecyclerView 布局管理器 点击事件 ListView 内置类型的简单运用 由于手机屏幕空间有限,能够一次性 ...

  9. js实现倒计时,定时器--完成时间倒计时

    js实现倒计时,定时器–完成时间倒计时 //每秒刷新一次 setInterval(function showtime() {//结束时间var endTime = document.getElemen ...

最新文章

  1. DELPHI 10.2(TOKYO) FOR LINUX的兼容性说明
  2. PMCAFF产品经理与融资7500万的故事
  3. python在线解题_20. 有效的括号-----leetcode刷题(python解题)
  4. 数博会重磅活动:第三届大数据科学与工程国际会议日程
  5. 从包中导入类的使用 java
  6. Linux当前终端走代理ip
  7. 虚幻引擎自带的创建插件的插件
  8. 多线程-AbstractQueuedSynchronizer(AQS)
  9. c语言作业汽车加速,C语言求车速
  10. ocdma相干非相干_相干成像和非相干成像有什么区别?
  11. C# 通用方法MD5计算
  12. mysql查询1999年后出生的_超级珍贵的30年前老照片,1999年前出生的看到一半泪奔了!...
  13. SAP FICO 批量成本估算
  14. 【转载】 下个月,Java 开启收费模式!
  15. 真正聪明的人,都善“藏”
  16. 全球及中国小型风力发电行业研究及十四五规划分析报告(2022)
  17. 输出汉诺塔的移动步骤
  18. C++ Vecter
  19. mysql 全盘扫描_mysql explain 正常,但是实际上是全盘扫描
  20. Java分布式、微服务概念

热门文章

  1. La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017
  2. 【中国大学生计算机大赛三等奖】冬奥会智能分析与预测可视化平台-简介(一)
  3. python爬虫JS逆向:X咕视频密码与指纹加密分析
  4. 《星际穿越》与“宇宙三禁律”
  5. 如何写好一份技术应聘简历
  6. NIPS 2022 | 一文了解腾讯AI Lab入选的13篇论文
  7. 软件开发的流程--中英文对照
  8. nginx入门与实战
  9. js特效之酷炫的彩虹圈
  10. 桃花院长:如何快速找对象? 告诉你11种方法