2
rxjava2と互換性のあるrxbindingsスナップショットバージョンを使用していますが、すべて正常に動作しますが、recyclerViewアダプター内のクリックイベントの処理方法はわかりません。私は "rxjava 1 way"を使用しようとしましたが、動作しません。リサイクラーアダプターの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にキャストしています。これはobservableです。 – Regulo
はい、これはビューホールダーの内部クラスを作成する必要があることを意味します。これは、外部クラス – mayosk