Android 实现列表倒计时功能

发布时间:2020-08-21 21:47:11

来源:脚本之家

阅读:147

作者:Choi晨

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

两种实现方式: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 < quickAdapter.getData().size(); i++) {

TimeBean bean = quickAdapter.getData().get(i);

if (bean.getTime() > 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 < quickAdapter.getData().size(); i++) {

final TimeBean bean = quickAdapter.getData().get(i);

final int finalI = i;

if (bean.getTime() > 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方法就不写了;

布局文件:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/btn"

android:text="ADD"

/>

android:id="@+id/rv"

android:layout_width="match_parent"

android:layout_height="match_parent">

//下面是item

android:layout_width="match_parent"

xmlns:tools="http://schemas.android.com/tools"

android:orientation="horizontal"

android:paddingBottom="@dimen/dp_10"

android:layout_height="60dp">

android:background="#33fb1212"

android:id="@+id/tv"

tools:text="你好啊"

android:gravity="center_vertical"

android:textSize="17dp"

android:paddingLeft="15dp"

android:textColor="#333"

android:layout_width="0dp"

android:layout_weight="2"

android:layout_height="match_parent" />

android:background="#33fb1212"

android:id="@+id/tv2"

tools:text="0s"

android:gravity="center_vertical"

android:textSize="17dp"

android:paddingLeft="15dp"

android:textColor="#333"

android:layout_width="0dp"

android:layout_weight="1"

android:layout_height="match_parent" />

总结

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

android倒计时功能,Android 实现列表倒计时功能相关推荐

  1. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

  2. android欢迎页圆形倒计时,android 欢迎页圆形进度条倒计时功能

    常见app欢迎页圆形进度条倒计时功能,可设置显示文字,进度条颜色,宽度,倒计时时间,内圆颜色.设置进度条类型  顺数进度条(0-100)还是倒数进度条(100-0): 先上效果图: 下面介绍实现逻辑: ...

  3. android自定义秒表,Android自定义Chronometer实现短信验证码秒表倒计时功能

    本文实例为大家分享了Chronometer实现倒计时功能,Android提供了实现按照秒计时的API,供大家参考,具体内容如下 一.自定义ChronometerView 继续自TextView 主要原 ...

  4. 基于eclipse的android项目实战—博学谷(新功能二)欢迎界面倒计时

    在前面博学谷项目的基础上进行改善和增加新功能 源码资源下载:https://download.csdn.net/download/hyh17808770899/19844673 博学谷的第二个新功能: ...

  5. android列表倒计时,RecyclerView实现列表倒计时

    最近在做一个项目,需要用到列表倒计时功能,捣鼓半天终于弄了出来,在安卓中实现这个效果需要用到Countdowntimer,通过这个类的使用,不仅可以实现倒计时的效果,还可以完美解决在实现倒计时过程中的 ...

  6. android购物车栏,Android怎么实现二级列表购物车功能

    Android怎么实现二级列表购物车功能 发布时间:2021-04-16 12:45:40 来源:亿速云 阅读:61 作者:小新 小编给大家分享一下Android怎么实现二级列表购物车功能,希望大家阅 ...

  7. android 列表倒计时,Android ListView列表实现倒计时

    本文实例为大家分享了Android ListView列表实现倒计时的具体代码,供大家参考,具体内容如下 效果图: 1. Activity package com.s296267833.ybs.acti ...

  8. android的实现关注好友功能,android仿微信好友列表功能

    android studio实现微信好友列表功能,注意有一个jar包我没有放上来,请大家到MainActivity中的那个网址里面下载即可,然后把pinyin4j-2.5.0.jar复制粘贴到项目的a ...

  9. 仿拼多多评团列表倒计时循环滚动 Android

    仿拼多多评团列表倒计时循环滚动,每段时间自动滚动 Android 现在开始动手撸代码 首先要改下recyclerview的逻辑 package com.hugh.basis.rvlooper;impo ...

最新文章

  1. 如何完全卸载VMware
  2. hdu3786 找出直系亲属 水题
  3. Java基础:多线程
  4. selenium自学笔记---ecshop购买脚本 xpath定位元素(下拉框,单选框)
  5. DNS区域传送、子域授权
  6. JVM指令:invokeSpecial/invokeVirtual/invokeStatic/invokeInterface/invokeDynamic方法调用指令
  7. goto语句_11. Go语言流程控制:goto 无条件跳转
  8. J2EE软件开发视频教程
  9. Java工作笔记-使用CXF接入及创建WebService
  10. 清除SVOHOST.EXE的方法
  11. java8函数式接口_java8的函数式接口
  12. C# winfrom gridview全部选择和全部取消
  13. Python+OpenCv实现摄像头人脸识别
  14. 企业微信H5_自建应用连接H5
  15. 微信小程序开发 网络异常监听
  16. 修改ftp服务器地址,ftp服务器ip地址修改
  17. html怎么设置seo,简单说明一下html相关的seo设置!
  18. python批量处理图片颜色反转_Python批量处理图片
  19. Xshell个人家庭免费版
  20. 浮点数的表示及范围 IEEE754

热门文章

  1. Gitlab自动触发Jenkins构建打包
  2. 如何让PHP运行更高效
  3. 以基因大数据推进“精准医疗”规划
  4. 把普通的git库变成bare库
  5. 革命离成功还非常非常远,我还不怎么努力
  6. 博客No.1活动暂停公告
  7. nVIDIA显卡命名规律
  8. html复选框怎么转成数组,在HTML中将html表转换为数组
  9. Spring Boot 中使用 Hikari,给我整不会了
  10. 一篇文章教你弄懂SpringMvc中的HttpMessageConverter