I have Rcylerview with Adapter each Item need 60 seconds After 60 seconds Item Remove From List : This is My Adapter Code :
public class LafzAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Activity activity;
public List<Lafz> Events;
public Typeface tempfont,tempfont2;
private MyClickListener myClickListener;
private final List<RecyclerView.ViewHolder> lstHolders=new ArrayList<>();
private Handler mHandler = new Handler();
private Runnable updateRemainingTimeRunnable = new Runnable() {
@Override
public void run() {
synchronized (lstHolders) {
for (RecyclerView.ViewHolder holder : lstHolders) {
((UserViewHolder) holder).updateTimeRemaining();
}
}
}
};
public LafzAdapter(List<Lafz> Events, Activity activity, Typeface ttemp) {
this.Events = Events;
this.activity = activity;
this.tempfont = ttemp;
}
public LafzAdapter(final List<Lafz> Events, Activity activity, Typeface ttemp, Typeface ttemp2) {
this.Events = Events;
this.activity = activity;
this.tempfont = ttemp;
this.tempfont2=ttemp2;
//lstHolders = new ArrayList<>();
startUpdateTimer();
}
@Override
protected void finalize() throws Throwable {
super.finalize();
mHandler.removeCallbacks(updateRemainingTimeRunnable);
}
private void startUpdateTimer() {
Timer tmr = new Timer();
tmr.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(updateRemainingTimeRunnable);
}
}, 1000, 1000);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapterlayoutlafz, parent, false);
UserViewHolder dataObjectHolder = new UserViewHolder(view);
return dataObjectHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
((UserViewHolder) holder).setdata(Events.get(position));
synchronized (lstHolders) {
lstHolders.add(holder);
}
((UserViewHolder) holder).updateTimeRemaining();
}
class UserViewHolder extends RecyclerView.ViewHolder
implements View
.OnClickListener{
Lafz lafztemp;
public TextView titlelafz;
public TextView timerlafz;
public TextView idnumber;
public TextView idtype;
public TextView iduser;
public LinearLayout llcolor,llcolor2;
CountDownTimer timer;
CircularProgressBar circularProgressBar;
public UserViewHolder(View view) {
super(view);
titlelafz=(TextView)view.findViewById(R.id.titlelafz);
titlelafz.setTypeface(tempfont2);
timerlafz=(TextView)view.findViewById(R.id.timerlafz);
timerlafz.setTypeface(tempfont);
idnumber=(TextView)view.findViewById(R.id.idnumber);
idtype=(TextView)view.findViewById(R.id.idtype);
iduser=(TextView)view.findViewById(R.id.iduser);
circularProgressBar=(CircularProgressBar) view.findViewById(R.id.circularProgressBar);
llcolor = (LinearLayout) view.findViewById(R.id.llcolor);
llcolor2 = (LinearLayout) view.findViewById(R.id.llcolor2);
view.setOnClickListener(this);
}
public void setdata(Lafz l)
{
lafztemp = l;
if(lafztemp.typelafz==0)
{
this.idnumber.setText(String.valueOf(lafztemp.id));
this.idtype.setText(String.valueOf(lafztemp.typelafz));
this.iduser.setText(String.valueOf(lafztemp.iduser));
this.titlelafz.setText(lafztemp.geram+" "+"گرم"+" "+String.format("%,d",lafztemp.mazane)+" "+"تومان");
this.timerlafz.setText(String.valueOf(lafztemp.getTimer()/1000));
this.llcolor2.setBackgroundColor(ContextCompat.getColor(activity,R.color.frooshred));
}
// خرید
else {
this.idnumber.setText(String.valueOf(lafztemp.id));
this.idtype.setText(String.valueOf(lafztemp.typelafz));
this.iduser.setText(String.valueOf(lafztemp.iduser));
this.titlelafz.setText(lafztemp.geram+" "+"گرم"+" "+String.format("%,d", lafztemp.mazane)+" "+"تومان");
this.timerlafz.setText(String.valueOf(lafztemp.getTimer()/1000));
this.llcolor2.setBackgroundColor(ContextCompat.getColor(activity,R.color.kharidgreen));
}
}
public void updateTimeRemaining() {
lafztemp.timer-=1000;
this.timerlafz.setText(String.valueOf((lafztemp.getTimer()/1000)));
Iterator<Lafz> dataIterator = Events.iterator();
int y=0;
if(lafztemp.timer==0)
{
while (dataIterator.hasNext()) {
Lafz rd = dataIterator.next();
if (rd.equals(lafztemp)) {
lafztemp.timer=60000;
this.circularProgressBar.setProgress(60f);
dataIterator.remove();
notifyItemRemoved(y);
notifyDataSetChanged();
break;
}
y++;
}
}
this.circularProgressBar.setProgress(this.circularProgressBar.getProgress()-1f);
}
@Override
public void onClick(View v) {
myClickListener.onItemClick(getAdapterPosition(), v);
}
}
@Override
public int getItemCount() {
return Events == null ? 0 : Events.size();
}
public void setOnItemClickListener(MyClickListener myClickListener) {
this.myClickListener = myClickListener;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
public interface MyClickListener {
public void onItemClick(int position, View v);
}}
but When Old Item Removed From List And New Item Is Added New Item It drops by two seconds per second Clear Screen Shot : Please See These screen shot for Understand First Image Gif: For the First Time Item Adedd Is Ok :
But After Four Item Expire And Remove From List : Four First item Item It drops by two seconds per second and after Four First Item Removed All Other Item Timer Is flicking Please See Second Gif :