这是一个类似的问题
coutndown timers in listview
它有一个很好的解决方案,但我需要与recyclervIEw
它有一个很好的解决方案,但我需要与recyclervIEw
编辑:
我尝试了什么,这是我的代码适配器
MyAdapter:
public class AdapterItems extends RecyclerVIEw.Adapter<RecyclerVIEw.VIEwHolder> {private ArrayList<topCompetitions> mListItems = new ArrayList<>();private ImageLoader mImageLoader;private Context context;private Handler handler;/******************************************/String current_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date d1 = null;Date d2 = null;long diff;long diffSeconds;long diffMinutes;long diffHours;long diffDays;String reachableDate = "";/******************************************/private ScheduledFuture updateFuture;public AdapterItems(Context context) { this.context = context; mImageLoader = AppController.getInstance().getimageLoader();}public voID setmListItems(ArrayList<topCompetitions> mListItems) { this.mListItems = mListItems; //update the adapter to reflect the new set of mListItems notifyDataSetChanged();}@OverrIDepublic RecyclerVIEw.VIEwHolder onCreateVIEwHolder(VIEwGroup parent,int vIEwType) { VIEw itemVIEw = LayoutInflater. from(parent.getContext()). inflate(R.layout.custom_horizontal_row,parent,false); return new ItemHolder(itemVIEw);}@OverrIDepublic voID onBindVIEwHolder(RecyclerVIEw.VIEwHolder holder,int position) { final topCompetitions currentItem = mListItems.get(position); final ItemHolder itemHolder = (ItemHolder) holder; /* start_date,name_com_ar,name_com_en,question_en,answer_ar1,answer_ar2,answer_ar3,answer_en1,answer_en2,answer_en3,right_answer; */ itemHolder.item_ID.setText(currentItem.getPrize_ID()); itemHolder.item_description.setText(currentItem.getname_com_ar()); itemHolder.start_date.setText(currentItem.getStart_date()); itemHolder.end_date.setText(currentItem.getEnd_date()); itemHolder.name_com_ar.setText(currentItem.getname_com_ar()); itemHolder.name_com_en.setText(currentItem.getname_com_en()); itemHolder.answer_en1.setText(currentItem.getAnswer_en1()); itemHolder.answer_en2.setText(currentItem.getAnswer_en2()); itemHolder.answer_en3.setText(currentItem.getAnswer_en3()); itemHolder.answer_ar1.setText(currentItem.getAnswer_ar1()); itemHolder.answer_ar2.setText(currentItem.getAnswer_ar2()); itemHolder.answer_ar3.setText(currentItem.getAnswer_ar3()); itemHolder.right_answer.setText(currentItem.getRight_answer()); itemHolder.question_en.setText(currentItem.getQuestion_en()); itemHolder.question_ar.setText(currentItem.getQuestion_ar()); itemHolder.desc_ar.setText(currentItem.getPrize_desc_ar()); itemHolder.desc_en.setText(currentItem.getPrize_desc_en()); String urllogo = currentItem.getPrize_pic1(); loadImages(urllogo,itemHolder); setDefferinceTimer(itemHolder,currentItem.getEnd_date()); if (updateFuture == null) { final Handler mainHandler = new Handler(Looper.getMainLooper()); updateFuture = Executors.newSingleThreadScheduledExecutor().scheduleAtFixedrate(new Runnable() { @OverrIDe public voID run() { setDefferinceTimer(itemHolder,currentItem.getEnd_date()); notifyDataSetChanged(); mainHandler.post(new Runnable() { @OverrIDe public voID run() { notifyDataSetChanged(); } }); } },1000,TimeUnit.MILliSECONDS); } /* new Handler(Looper.getMainLooper()).post(new Runnable() { @OverrIDe public voID run() { new CountDownTimer(20000,1000) { public voID onTick(long millisUntilFinished) { startCountDown(itemHolder,currentItem.getEnd_date() + " 00:00:00"); notifyDataSetChanged(); } public voID onFinish() { //counterTextVIEw.setText("done!"); } }.start(); } }); */}public voID setDefferinceTimer(final RecyclerVIEw.VIEwHolder holder,String itemEndDate){ final ItemHolder itemHolder = (ItemHolder) holder; current_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); // reachableDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(itemEndDate); try { d1 = format.parse(current_date); d2 = format.parse(itemEndDate+" 00:00:00"); } catch (ParseException e) { e.printstacktrace(); } diff = d2.getTime() - d1.getTime(); diffSeconds = diff / 1000 % 60; diffMinutes = diff / (60 * 1000) % 60; diffHours = diff / (60 * 60 * 1000) % 24; diffDays = diff / (24 * 60 * 60 * 1000); itemHolder.days_tf.setText(""+diffDays); itemHolder.hours_tf.setText(""+diffHours); itemHolder.minutes_tf.setText(""+diffMinutes); itemHolder.seconds_tf.setText(""+diffSeconds);}private voID loadImages(String urlthumbnail,final RecyclerVIEw.VIEwHolder holder) { final ItemHolder itemHolder = (ItemHolder) holder; mImageLoader.get(urlthumbnail,new ImageLoader.ImageListener() { @OverrIDe public voID onResponse(ImageLoader.ImageContainer response,boolean isImmediate) { itemHolder.item_image.setimageBitmap(response.getBitmap()); //holder.salon_gender.setimageBitmap(response.getBitmap()); } @OverrIDe public voID onErrorResponse(VolleyError error) { } });}@OverrIDepublic int getItemCount() { return mListItems.size();}private class ItemHolder extends RecyclerVIEw.VIEwHolder { public TextVIEw item_ID,item_description,end_date,start_date,question_ar,right_answer,desc_ar,desc_en; public TextVIEw days_tf,hours_tf,minutes_tf,seconds_tf; public circleimageVIEw item_image; public ItemHolder(VIEw itemVIEw) { super(itemVIEw); start_date = (TextVIEw) itemVIEw.findVIEwByID(R.ID.start_date); end_date = (TextVIEw) itemVIEw.findVIEwByID(R.ID.end_date); name_com_ar = (TextVIEw) itemVIEw.findVIEwByID(R.ID.name_com_ar); name_com_en = (TextVIEw) itemVIEw.findVIEwByID(R.ID.name_com_en); question_en = (TextVIEw) itemVIEw.findVIEwByID(R.ID.question_en); question_ar = (TextVIEw) itemVIEw.findVIEwByID(R.ID.question_ar); desc_ar = (TextVIEw) itemVIEw.findVIEwByID(R.ID.desc_ar); desc_en = (TextVIEw) itemVIEw.findVIEwByID(R.ID.desc_en); answer_ar1 = (TextVIEw) itemVIEw.findVIEwByID(R.ID.answer_ar1); answer_ar2 = (TextVIEw) itemVIEw.findVIEwByID(R.ID.answer_ar2); answer_ar3 = (TextVIEw) itemVIEw.findVIEwByID(R.ID.answer_ar3); answer_en1 = (TextVIEw) itemVIEw.findVIEwByID(R.ID.answer_en1); answer_en2 = (TextVIEw) itemVIEw.findVIEwByID(R.ID.answer_en2); answer_en3 = (TextVIEw) itemVIEw.findVIEwByID(R.ID.answer_en3); right_answer = (TextVIEw) itemVIEw.findVIEwByID(R.ID.right_answer); item_ID = (TextVIEw) itemVIEw.findVIEwByID(R.ID.item_ID); item_description = (TextVIEw) itemVIEw.findVIEwByID(R.ID.item_description); item_image = (circleimageVIEw) itemVIEw.findVIEwByID(R.ID.item_image); days_tf = (TextVIEw) itemVIEw.findVIEwByID(R.ID.days_tf); hours_tf = (TextVIEw) itemVIEw.findVIEwByID(R.ID.hours_tf); minutes_tf = (TextVIEw) itemVIEw.findVIEwByID(R.ID.minutes_tf); seconds_tf = (TextVIEw) itemVIEw.findVIEwByID(R.ID.seconds_tf); }}解决方法 在VIEwHolder中添加一个CountDownTimer成员.在getVIEw()中设置并启动计数器,并且不要忘记在同一VIEwHolder实例中取消任何现有的计数器.在onTick()中,您需要更新显示屏上的值,而不是启动计数器. 总结
以上是内存溢出为你收集整理的android – 如何在RecyclerView中处理多个倒计时器?全部内容,希望文章能够帮你解决android – 如何在RecyclerView中处理多个倒计时器?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)