android – 如何在RecyclerView中处理多个倒计时器?

android – 如何在RecyclerView中处理多个倒计时器?,第1张

概述我有一个Recyclerview,我需要在每一行显示一个倒计时. 这是一个类似的问题 coutndown timers in listview 它有一个很好的解决方案,但我需要与recyclerview 它有一个很好的解决方案,但我需要与recyclerview 编辑: 我尝试了什么,这是我的代码适配器 MyAdapter: public class AdapterItems extends Re 我有一个RecyclervIEw,我需要在每一行显示一个倒计时.

这是一个类似的问题
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中处理多个倒计时器?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1127897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存