Android_面试题之listview中的item的倒计时

有一个哥们去面试,面试官给的题目,如何实现Listview中每个item都有倒计时,而且不会乱序?

国际惯例,先来一张效果图
Android_面试题之listview中的item的倒计时_第1张图片

面试的情况中,刚听到貌似挺咋呼的,复用?TAG?多线程??????
一系列的方式去想解决,可能有点蒙圈,静下来想想,试着写写,好像是那么回事….

我是这样想的,RecylerView 就是负责显示的,倒计时也是属于数据源的变化,那是数据的事情,和recylerview的bindHolder没有关系,所以
应该不能在这里做手脚,比如开线程,比如执行倒计时,NONONO,

这样分析下来最简单的做法就是每隔一秒刷新一下数据源,
这样手到擒来,大家都会写了,会写倒计时就能实现了嘛.

    private void startCountDownTaskByRxAndroid() {
        Observable.interval(0, 1, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<Long>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {
                    }

                    @Override
                    public void onNext(Long aLong) {
                        modifyRecylerData();
                        mCountDownAdapter.notifyDataSetChanged();
                    }
                });
    }

上面代码就是实现的过程基本就一句是有用的就是,每隔一秒发一次消息,在onNext里面完成数据源的修改,然后notify,..

/** * 修改数据源 */
    private void modifyRecylerData() {
        for (int i = 0; i < mCountDownEntities.size(); i++) {
            CountDownEntity temp = mCountDownEntities.get(i);
            long currentCountDownTime = temp.getCountDownTimeTotal();
            if (currentCountDownTime >= 1) {
                long tempCT = currentCountDownTime - 1;
                temp.setCountDownTimeTotal(tempCT);
                temp.setCountDownDesc("剩余时间:" + TimeFormat.formatTime(tempCT));
            } else {
                continue;
            }
        }
    }

这是修改数据源的方法,
没有更多的测试其性能,希望大家有更好的思路可以一起讨论,来实现
谢谢,
最后源码奉上,在GitHub中,希望大家在指正交流的时候能给我一个star
fork一下更好谢谢!
源码下载

你可能感兴趣的:(多线程,android,ListView,面试题)