本文实例为大家分享了Android ListView列表实现倒计时的具体代码,供大家参考,具体内容如下

效果图:

1. Activity

package com.s296267833.ybs.activity.firstPage.timedown;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ListView;

import com.s296267833.ybs.R;

import java.util.ArrayList;

import java.util.List;

/**

* ListView列表实现倒计时

* */

public class TimeDownActivity extends AppCompatActivity {

private TimeDownLvAdapter mAdapter;

private ListView mListView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_time_down);

mListView= findViewById(R.id.lv_time_down);

setAdapter();

}

/**

* 设置适配器

* */

private void setAdapter() {

mAdapter = new TimeDownLvAdapter(this,getTimerItemList());

mListView.setAdapter(mAdapter);

}

/**

* 设置倒计时的数据

* */

public static List getTimerItemList() {

List lstTimeDownItems = new ArrayList<>();

lstTimeDownItems.add(new TimeDownItem("A千万种心动", System.currentTimeMillis() + 11 * 1000));

lstTimeDownItems.add(new TimeDownItem("B千万种心动", System.currentTimeMillis() + 22 * 1000));

lstTimeDownItems.add(new TimeDownItem("C千万种心动", System.currentTimeMillis() + 26 * 1000));

lstTimeDownItems.add(new TimeDownItem("D千万种心动", System.currentTimeMillis() + 33 * 1000));

lstTimeDownItems.add(new TimeDownItem("E千万种心动", System.currentTimeMillis() + 24 * 1000));

lstTimeDownItems.add(new TimeDownItem("F千万种心动", System.currentTimeMillis() + 98 * 1000));

lstTimeDownItems.add(new TimeDownItem("G千万种心动", System.currentTimeMillis() + 14 * 1000));

lstTimeDownItems.add(new TimeDownItem("H千万种心动", System.currentTimeMillis() + 36 * 1000));

lstTimeDownItems.add(new TimeDownItem("I千万种心动", System.currentTimeMillis() + 58 * 1000));

lstTimeDownItems.add(new TimeDownItem("J千万种心动", System.currentTimeMillis() + 47 * 1000));

lstTimeDownItems.add(new TimeDownItem("K千万种心动", System.currentTimeMillis() + 66 * 1000));

lstTimeDownItems.add(new TimeDownItem("L千万种心动", System.currentTimeMillis() + 55 * 1000));

lstTimeDownItems.add(new TimeDownItem("M千万种心动", System.currentTimeMillis() + 62 * 1000));

lstTimeDownItems.add(new TimeDownItem("N千万种心动", System.currentTimeMillis() + 45 * 1000));

lstTimeDownItems.add(new TimeDownItem("O千万种心动", System.currentTimeMillis() + 14 * 1000));

return lstTimeDownItems;

}

/**

* 清空当前 CountTimeDown 资源

* */

@Override

protected void onDestroy() {

super.onDestroy();

if (mAdapter != null) {

mAdapter.cancelAllTimers();

}

}

}

2. activity_time_down布局

xmlns:android="http://schemas.android.com/apk/res/android"

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

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.s296267833.ybs.activity.firstPage.timedown.TimeDownActivity">

android:id="@+id/lv_time_down"

android:background="#faa"

android:divider="#00000000"

android:layout_width="match_parent"

android:layout_height="match_parent">

3. ListView的item类(TimeDownItem)

package com.s296267833.ybs.activity.firstPage.timedown;

/**

* Created by JiYaRuo on 2019/1/9.

* @BeUsedFor 倒计时Lv的Bean类

*/

public class TimeDownItem {

//其他属性

public String name;

//倒计时长,单位毫秒

public long expirationTime;

public TimeDownItem(String name, long expirationTime) {

this.name = name;

this.expirationTime = expirationTime;

}

}

4. listview的item布局

xmlns:android="http://schemas.android.com/apk/res/android"

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

android:layout_width="match_parent"

android:layout_height="64dp"

android:orientation="horizontal"

android:padding="10dp">

android:id="@+id/tv_status"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

tools:text="status"

android:textColor="#ffffff"

android:layout_gravity="center"

android:gravity="center" />

android:id="@+id/tv_time"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:textSize="15sp"

android:gravity="right"

android:textColor="#ffffff"

android:layout_gravity="center_vertical"

tools:text="00:00:00"/>

5. ListView的适配器TimeDownLvAdapter

package com.s296267833.ybs.activity.firstPage.timedown;

import android.content.Context;

import android.os.CountDownTimer;

import android.util.SparseArray;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.TextView;

import com.s296267833.ybs.R;

import com.s296267833.ybs.activity.firstPage.TimeUtils;

import java.util.List;

/**

* Created by JiYaRuo on 2019/1/9.

* @BeUsedFor 列表倒计时listView的适配器

*/

public class TimeDownLvAdapter extends BaseAdapter {

private List mDatas;

private Context mContext;

//用于退出 Activity,避免 Countdown,造成资源浪费。

private SparseArray countDownCounters;

public TimeDownLvAdapter(Context mContext, List mDatas) {

this.mContext = mContext;

this.mDatas = mDatas;

this.countDownCounters = new SparseArray<>();

}

@Override

public int getCount() {

if (mDatas != null && !mDatas.isEmpty()) {

return mDatas.size();

}

return 0;

}

@Override

public Object getItem(int position) {

if (mDatas != null && !mDatas.isEmpty()) {

return mDatas.get(position);

}

return null;

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

final ViewHolder viewHolder;

if (convertView == null) {

convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_common, parent, false);

viewHolder = new ViewHolder();

viewHolder.statusTv = (TextView) convertView.findViewById(R.id.tv_status);

viewHolder.timeTv = (TextView) convertView.findViewById(R.id.tv_time);

convertView.setTag(viewHolder);

} else {

viewHolder = (ViewHolder) convertView.getTag();

}

final TimeDownItem data = mDatas.get(position);

viewHolder.statusTv.setText(data.name);

CountDownTimer countDownTimer = countDownCounters.get(viewHolder.timeTv.hashCode());

if (countDownTimer != null) {

//将复用的倒计时清除

countDownTimer.cancel();

}

long timer = data.expirationTime;

timer = timer - System.currentTimeMillis();

//expirationTime 与系统时间做比较,timer 小于零,则此时倒计时已经结束。

if (timer > 0) {

countDownTimer = new CountDownTimer(timer, 1000) {

public void onTick(long millisUntilFinished) {

viewHolder.timeTv.setText(TimeUtils.getCountTimeByLong(millisUntilFinished));

}

public void onFinish() {

viewHolder.timeTv.setText("00:00:00");

viewHolder.statusTv.setText(data.name + ":结束");

}

}.start();

//将此 countDownTimer 放入list.

countDownCounters.put(viewHolder.timeTv.hashCode(), countDownTimer);

} else {

viewHolder.timeTv.setText("00:00:00");

viewHolder.statusTv.setText(data.name + ":结束");

}

return convertView;

}

/**

* ViewHolder内部类

* */

public class ViewHolder {

public TextView statusTv;

public TextView timeTv;

}

/**

* 清空当前 CountTimeDown 资源

*/

public void cancelAllTimers() {

if (countDownCounters == null) {

return;

}

for (int i = 0, length = countDownCounters.size(); i < length; i++) {

CountDownTimer cdt = countDownCounters.get(countDownCounters.keyAt(i));

if (cdt != null) {

cdt.cancel();

}

}

}

}

6. 工具类TimeUtils

package com.s296267833.ybs.activity.firstPage;

/**

* Created by JiYaRuo on 2019/1/9.

* @BeUsedFor 倒计时工具类

*/

public class TimeUtils {

/**

* 毫秒换成00:00:00

* */

public static String getCountTimeByLong(long finishTime) {

int totalTime = (int) (finishTime / 1000);//秒

int hour = 0, minute = 0, second = 0;

if (3600 <= totalTime) {

hour = totalTime / 3600;

totalTime = totalTime - 3600 * hour;

}

if (60 <= totalTime) {

minute = totalTime / 60;

totalTime = totalTime - 60 * minute;

}

if (0 <= totalTime) {

second = totalTime;

}

StringBuilder sb = new StringBuilder();

if (hour < 10) {

sb.append("0").append(hour).append(":");

} else {

sb.append(hour).append(":");

}

if (minute < 10) {

sb.append("0").append(minute).append(":");

} else {

sb.append(minute).append(":");

}

if (second < 10) {

sb.append("0").append(second);

} else {

sb.append(second);

}

return sb.toString();

}

/**

* 将LONG类型的时间戳转换为xx:xx:xx时分秒

* */

public static String formatLongToTimeStr(Long l) {

int hour = 0;

int minute = 0;

int second = 0;

second = l.intValue() ;

if (second > 60) {

minute = second / 60; //取整

second = second % 60; //取余

}

if (minute > 60) {

hour = minute / 60;

minute = minute % 60;

}

String strtime = hour+":"+minute+":"+second;

return strtime;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

  1. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  2. Android学习系列(10)--App列表之拖拽ListView(上)

    研究了很久的拖拽ListView的实现,受益良多,特此与尔共飨.       鉴于这部分内容网上的资料少而简陋,而具体的实现过程或许对大家才有帮助,为了详尽而不失真,我们一步一步分析,分成两篇文章. ...

  3. 我的Android进阶之旅------Android二级ListView列表的实现

    实现如下图所示的二级列表效果 首先是在布局文件中,布局两个ListView,代码如下: <LinearLayout xmlns:android="http://schemas.andr ...

  4. 精通android布局,Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件...

    标题图 UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个 ...

  5. 腾讯Android自动化测试实战3.3.2 ListView列表遍历

    3.3.2 ListView列表遍历 编写Android端的自动化测试用例,最常见的控件有ListView,而要想测试ListView,就必然要涉及ListView的遍历. 关于ListView的遍历 ...

  6. android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题...

    android  在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: 1 @Overr ...

  7. Android App列表之游标ListView(索引ListView)

    原帖地址:http://www.apkbus.com/android-14717-1-1.html 游标ListView,提供索引标签,使用户能够快速定位列表项.       也可以叫索引ListVi ...

  8. Android一个ListView列表之中插入两种不同的数据

    http://www.cnblogs.com/roucheng/ Android一个ListView列表之中插入两种不同的数据 代码如下: public class ViewHolder{Button ...

  9. android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

    我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助 什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时) Android中Adapter类其 ...

最新文章

  1. 新加坡南洋理工 计算机排名6,别踩坑了!这些才是新加坡最好的专业!
  2. java虚拟机监控_Java虚拟机监控工具
  3. linux安装weblogic_WebLogic的Azure虚拟机主要版本发布
  4. 【转载】doxygen+graphviz生成代码文档
  5. 不学无数——JAVA中NIO再深入
  6. ffmpeg time_base详解
  7. Spring源码下载步骤
  8. HTML期末学生大作业-最新QQ音乐、网易云音乐、酷狗音乐、虾米音乐、咪咕音乐网站html+css+javascript
  9. oracle新建定时任务,Oracle创建定时任务
  10. json转xml、xml转json
  11. 中国塑料杯市场需求预测与发展前景分析报告2022-2027年
  12. Win10 Ubuntu 制作多系统U盘
  13. win7背景颜色设置为淡绿色
  14. 移动开发之三种近场通信
  15. java合并单元格边框不完整,java poi 合并单元格后边框问题
  16. 软件测试缺陷表怎样描述,作为软件测试人员,如何描述缺陷(Defect)?
  17. elementui后台管理demo
  18. mysql中如何分页查询_MySQL_mysql分页原理和高效率的mysql分页查询语句,以前我在mysql中分页都是用的 l - phpStudy...
  19. 机器学习理论-PAC learning
  20. 微信编辑器哪个操作最简单?

热门文章

  1. 知道三个金,三个火,三水~~都念什么吗?
  2. excel函数应用:Column函数替代列参数提高公式灵活性
  3. Java计算一个数的平方根(即:根号)
  4. 关于Amazon Redshift性能调优的十大Tips
  5. Phun-有趣的二维物理引擎
  6. Java杂谈——求所有的4位吸血鬼数字
  7. google浏览器chrome安装插件方法
  8. ubuntu vim的 保存退出方法
  9. 修改电脑C:\User\用户名文件夹的名字
  10. 控件测试之单行文本框测试