2
我使用rxbindings快照版本與rxjava2兼容,一切正常,但我不知道如何處理recyclerView適配器內的點擊事件。我試圖使用「rxjava 1種方法」,但它不起作用。Rxjava2查看點擊回收站適配器
RxJava 1.0:
class RecyclerAdapter ... {
private final PublishSubject<Int> onClickSubject = PublishSubject.create();
Observable<Int> getItemClickSignal() {
return onClickSubject;
}
@Override
public void onBindViewHolder(EcommerceAdapter.ViewHolder holder, int position) {
RxView.clicks(holder.itemView)
.map(aVoid -> position)
.subscribe(mOnClickSubject);
}
}
和活性:
class Activity ... {
mAdapter.getItemClickSignal()
.subscribe(new Subscriber<Int>() {
@Override
public void onCompleted() {}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(int position) {
Log.d(TAG, position);
}
});
}
Rxjava 2.0:
mAdapter.getItemClickSignal()
.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Log.d(TAG, position);
}
});
同樣的方法不與rxjava2工作既不拋出任何異常,並且我無法弄清楚爲什麼。
等等,你是否將這個PublishSubject轉換爲可觀察的?不應該用'onClickSubject.hide()'完成嗎? – Tuby
嘿,@Tuby!你是對的!我應該使用onClickSubject.hide(),否則,我將PublishSubject強制轉換爲observable,這已經是可觀察的了。 – Regulo
是的,但這意味着你需要做視圖的內部類,這是不好的主意,因爲你繼續引用外部類 – mayosk