【发布时间】:2016-07-25 07:18:02
【问题描述】:
我需要在时间到期时删除一个项目,部分我通过引用这个How to handle multiple countdown timers in ListView?得到输出
滚动列表后,一些时间过期的项目没有被删除,时间也没有更新。
package com.techno.deliveryboy.Adapter;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.techno.deliveryboy.Pojos.DummyTimer;
import com.techno.deliveryboy.R;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by developer on 23/7/16.
*/
public class Incoiming_orders_Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private LayoutInflater lf;
Boolean onBind = true;
private List<MyViewHolder> lstHolders;
ArrayList<Integer> unbindvalues=new ArrayList<>();
private Handler mHandler = new Handler();
List<DummyTimer> lstProducts=new ArrayList<>();
private Runnable updateRemainingTimeRunnable = new Runnable() {
@Override
public void run() {
synchronized (lstHolders) {
long currentTime = System.currentTimeMillis();
for (MyViewHolder holder : lstHolders) {
holder.updateTimeRemaining(currentTime);
}
}
}
};
public Incoiming_orders_Adapter(FragmentActivity activity, List<DummyTimer> lstProduct) {
lstHolders = new ArrayList<>();
lstProducts=lstProduct;
startUpdateTimer();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.incoming_orders_item, parent, false);
return new MyViewHolder(itemView);
}
private void startUpdateTimer() {
Timer tmr = new Timer();
tmr.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(updateRemainingTimeRunnable);
}
}, 1000, 1000);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof MyViewHolder){
onBind=true;
MyViewHolder holder1= (MyViewHolder) holder;
synchronized (lstHolders) {
lstHolders.add(holder1);
}
holder1.setData(lstProducts.get(position),position);
onBind=false;
}
}
@Override
public int getItemCount() {
return lstProducts.size();
}
public void removeAt(int position) {
/* for (Iterator<MyViewHolder> iterator = lstHolders.iterator(); iterator.hasNext();) {
iterator.remove();
}*/
if(!onBind) {
if(unbindvalues!=null&&unbindvalues.size()!=0&&position>=0){
for (Integer i:unbindvalues) {
lstProducts.remove(position);
notifyItemRemoved(position);
}
unbindvalues.clear();
}else {
if(position>=0){
lstProducts.remove(position);
notifyItemRemoved(position);
}
}
notifyDataSetChanged();
}else {
System.out.println("+Bind->true+");
if(position>=0)
unbindvalues.add(position);
}
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title, tvTimeRemaining, genre;
DummyTimer mProduct;
public void setData(DummyTimer item, int position) {
mProduct = item;
title.setText(item.name);
updateTimeRemaining(System.currentTimeMillis());
}
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.Item_Totalvalue);
tvTimeRemaining= (TextView) view.findViewById(R.id.Item_timeout);
}
public void updateTimeRemaining(long currentTime) {
long timeDiff = mProduct.expirationTime - currentTime;
if (timeDiff > 0) {
int seconds = (int) (timeDiff / 1000) % 60;
int minutes = (int) ((timeDiff / (1000 * 60)) % 60);
int hours = (int) ((timeDiff / (1000 * 60 * 60)) % 24);
tvTimeRemaining.setText(hours + " hrs " + minutes + " mins " + seconds + " sec");
} else {
// tvTimeRemaining.setText(String.valueOf(getAdapterPosition()));
removeAt(getAdapterPosition());
}
}
}
@Override
public long getItemId(int position) {
return position;
}
}
请发表您的意见。
【问题讨论】:
标签: java android timer android-recyclerview