android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...
ListViewTimer
列表中每一個item都有計時器 (可實(shí)現(xiàn)倒計時或者計時器的功能)
項目中有時會遇到列表中含有倒計時或者是計時器的需求,實(shí)現(xiàn)的方式有很多種,此Demo中是使用Thread + Handler實(shí)時的對item的局部進(jìn)行
刷新達(dá)到計時或倒計時的功能
本項目中實(shí)現(xiàn)的是計時器功能(當(dāng)前時間距離過去的一個時間的時間差值)
實(shí)現(xiàn)步驟:
1.創(chuàng)建數(shù)據(jù)模型TaskModel
public class TaskModel {
public String timer; //計時器顯示的結(jié)果 10:31:30(時分秒的格式)
public long sendTime = 1547516639000L;//目標(biāo)時間
public long countTime;//long型的時間差值
}
2.獲取服務(wù)器端接口中得到的目標(biāo)時間(最好是long數(shù)據(jù)類型方便加減操作)準(zhǔn)備好數(shù)據(jù);
3.創(chuàng)建Thread,主要是計算當(dāng)前時間和目標(biāo)時間的差值,也就是countTime字段的值;
獲取當(dāng)前時間方法:long currentTime = System.currentTimeMillis();
時間差值:countTime = currentTime - sendTime;
頁面顯示的時間差值:
long hours = (counttime) / (1000 * 60 * 60);
long minutes = (counttime - hours * (1000 * 60 * 60)) / (1000 * 60);
long second = (counttime / 1000 - hours * 60 * 60 - minutes * 60);
//并保存在商品time這個屬性內(nèi)
String hoursStr = hours + "";
String minutesStr = minutes + "";
String secondStr = second + "";
if (hours < 10) {
hoursStr = "0" + hoursStr;
}
if (minutes < 10) {
minutesStr = "0" + minutesStr;
}
if (second < 10) {
secondStr = "0" + secondStr;
}
timer = hoursStr + ":" + minutesStr + ":" + secondStr;
4.準(zhǔn)備好數(shù)據(jù),我們就要創(chuàng)建適配器,適配器和普通的適配器一樣,只不過要創(chuàng)建一個ViewHolder的集合mHolderList,在onBindViewHolder方法中將每一個ViewHolder
add進(jìn)mHolderList中
//先判斷集合中是否包含當(dāng)前的ViewHolder
if (!mHolderList.contains(myViewHolder)) {
mHolderList.add(myViewHolder);//添加
}
然后提供一個方法更新item中時間差
/**
* 只刷新item中的計時器數(shù)據(jù)
*/
public void notifyTime() {
for (int i = 0; i < mHolderList.size(); i++) {
mHolderList.get(i).mTextView.setText(mData.get(mHolderList.get(i).position).timer);
}
}
5.創(chuàng)建Handler,每次收到新的消息就調(diào)用Adapter中的notifyTime方法;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
//優(yōu)化刷新adapter的方法
mAdapter.notifyTime();
break;
}
super.handleMessage(msg);
}
};
6.在之前創(chuàng)建好的Thread中獲取完時間差值之后創(chuàng)建message并發(fā)送給Handler
Message message = new Message();
message.what = 1;
//發(fā)送信息給handler
mHandler.sendMessage(message);
注:Thread中要有一個停止發(fā)送消息的標(biāo)記值endThread,隨著當(dāng)前頁面的生命周期停止Thread
@Override
public void onDestroy() {
super.onDestroy();
myThread.endThread = true;
}
具體的詳細(xì)實(shí)現(xiàn)看Demo中,每一步都有注釋可以看懂;
總結(jié)
以上是生活随笔為你收集整理的android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaScript】封装对象与强制类
- 下一篇: java内嵌浏览器插件