热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android实现列表倒计时功能

这篇文章主要介绍了Android实现列表倒计时功能,代码很简单,没有任何难度,使用RecyclerView+BaseRecyclerViewAdapterHelper列表实现,需要的朋友可以参考下

单个计时器,然后遍历数据 刷新条目;

两种实现方式:1、Handler轮询; 2、子线程睡眠(时间到后 移除列表中的条目会有问题);

代码很简单,没有任何难度,列表使用 RecyclerView+BaseRecyclerViewAdapterHelper实现;

implementation 'androidx.recyclerview:recyclerview:1.1.0'
 implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.1'
 
public class MainActivity extends AppCompatActivity {
 private RecyclerView rv;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 rv = findViewById(R.id.rv);
 initView();
 initData();
 findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
  quickAdapter.addData(0,new TimeBean("附加商品、离活动结束还剩:" , 99));
  rv.scrollToPosition(0);
  }
 });
 }
 private QuickAdapter quickAdapter;
 private void initView() {
 quickAdapter = new QuickAdapter(R.layout.item);
 rv.setLayoutManager(new LinearLayoutManager(this));
 rv.setAdapter(quickAdapter);
 rv.setItemAnimator(null);
 Countdown();
 }
 private void initData() {
 List datas = new ArrayList<>();
 for (int i = 1; i <10; i++) {
  datas.add(new TimeBean("商品" + i + "、离活动结束还剩:", (i + 5) * i));
 }
 quickAdapter.setNewData(datas);
 }
 private class QuickAdapter extends BaseQuickAdapter {
 public QuickAdapter(int layoutResId) {
  super(layoutResId);
 }
 @Override
 protected void convert(BaseViewHolder vh, TimeBean datas) {
  vh.setText(R.id.tv, datas.getStr() + "");
  vh.setText(R.id.tv2, datas.getTime() + "s");
 }
 }
 private Handler mHandler = new Handler();
 private Runnable runnable;
 private void Countdown() {
 runnable = new Runnable() {
  @Override
  public void run() {
  for (int i = 0; i  0) {
   bean.setTime(bean.getTime() - 1);
   quickAdapter.setData(i, bean);
   } else {
   quickAdapter.remove(i);
   }
  }
  mHandler.postDelayed(runnable, 1000L);
  }
 };
 mHandler.postDelayed(runnable, 1000L);
 }
 private void Countdown2() {
 new Thread(new Runnable() {
  @Override
  public void run() {
  while (true){
   SystemClock.sleep(1000L);
   for (int i = 0; i  0) {
    bean.setTime(bean.getTime() - 1);
    runOnUiThread(new Runnable() {
    @Override
    public void run() {
     quickAdapter.setData(finalI, bean); 
    }
    });
   } else {
    // 当时间是0时 移除条目(子线程加睡眠模式移除条目有问题,原因时数据源未更新)
    runOnUiThread(new Runnable() {
    @Override
    public void run() {
     quickAdapter.remove(finalI);
    }
    });
   }
   }
  }
  }
 }).start();
 }
 @Override
 protected void onDestroy() {
 super.onDestroy();
 mHandler.removeCallbacks(runnable);
 mHandler.removeCallbacksAndMessages(null);
 mHandler = null;
 }
public class TimeBean {
 public TimeBean(String str, int time) {
 this.str = str;
 this.time = time;
 }
 private String str;
 private int time;
}

 Get 、 Set方法就不写了;

布局文件:

<&#63;xml version="1.0" encoding="utf-8"&#63;>

 

总结

到此这篇关于Android 实现列表倒计时功能的文章就介绍到这了,更多相关android 列表倒计时内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本报告涵盖了个人博客账号和码云账号的注册过程,以及对网络工程专业学习的反思与展望。通过回顾初入大学时的专业选择,分析当前的专业知识和技能水平,并对未来的职业规划进行了详细讨论。 ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • VSCode与Gitee集成:项目提交的高效实践
    本文介绍如何利用VSCode内置的Git工具将项目提交到Gitee,简化Git命令的使用,提升代码管理效率。同时分享一些常见的踩坑经验和解决方案。 ... [详细]
author-avatar
aamjlft
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有