在不影响 Android 中的 UI 的情况下,在 RecyclerView 中设置倒数计时器的最佳方法是什么?

What is the best way to set a count down timer inside RecyclerView without affecting UI in Android?

我想在 recyclerview 的每个事件中设置一个倒数计时器。

我在onBindViewHolder里面试过了。它正在工作,但同时它也在影响 UI。

例如,点击事件不起作用。

有没有最好的解决方法?

您可以使用 RxJava 中的 Observable.interval 这是 countdowntimer

的实用函数
public static Observable<Long> countdownTimer(long countdownValue, Observer<Long> observer) {
        if (observer == null) return Observable.just((long) 0);

        //.interval is a cold observable
        // it will emit separately for every observer
        Observable<Long> timerObservale = Observable
                .interval(1, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .takeWhile(new Predicate<Long>() {
                    @Override
                    public boolean test(Long aLong) throws Exception {
                        return aLong <= countdownValue;
                    }
                })
                .doOnError(Throwable::printStackTrace)
                .observeOn(AndroidSchedulers.mainThread());

        timerObservale.subscribe(observer);
        return timerObservale;
    }

以下是您将如何使用它

Utils.countdownTimer(60, new Observer<Long>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Long aLong) {
                //do somethng
            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();

            }

            @Override
            public void onComplete() {

            }
        });

utils 函数在给定的时间段内每秒发出一个 long