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