最近项目中为了解决按钮重复点击问题,搜索过程中,发现Rxjava居然可以实现这个功能,但是问题随之而来,网上给出的所有Rxjava的解决方案都是基于Rxjava 1.0版本的,而项目工程中使用的Rxjava2。话不多说,直接上代码,各位看官自己看吧。
Rxjava1实现
RxViewHelp.java
package com.hofon.common.util.help;
import android.support.annotation.NonNull;
import android.view.View;
import com.hofon.common.frame.retrofit.subscribers.RxView;
import java.util.List;
import java.util.concurrent.TimeUnit;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
/**
* Created by xfkang on 2017/3/29.
*/
public class RxViewHelp {
public static void clicks(Action1 action, @NonNull View... views) {
for (View view : views) {
RxView.clicks(view).throttleFirst(500, TimeUnit.MILLISECONDS).subscribe(action);
}
}
public static Observable countDown(int time) {
if (time < 0) time = 0;
final int countTime = time;
return Observable.interval(0, 1, TimeUnit.SECONDS)
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1() {
@Override
public Integer call(Long increaseTime) {
return countTime - increaseTime.intValue();
}
})
.take(countTime + 1);
}
}
RxView.java
package com.hofon.common.frame.retrofit.subscribers;
import android.support.annotation.CheckResult;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.Adapter;
import com.hofon.doctor.adapter.common.base.RecyclerAdapter;
import rx.Observable;
import static com.hofon.common.frame.retrofit.subscribers.Preconditions.checkNotNull;
/**
* Created by xfkang on 2017/3/29.
*/
public final class RxView {
/**
* 监听onclick事件防抖动
*
* @param vi