Ich verwende Rxbindings Snapshot-Version kompatibel mit RXJAVA2 und alles funktioniert perfekt, aber ich weiß nicht, wie mit Klickereignissen in RecyclerView-Adapter umzugehen. Ich habe versucht, "rxjava 1 Way" zu verwenden, aber es funktioniert nicht.Rxjava2 Ansicht Klicks im Recycler-Adapter
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);
}
}
und in Tätigkeit:
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);
}
});
Der gleiche Ansatz funktioniert nicht mit rxjava2 weder wirft jede Ausnahme, und Ich konnte nicht herausfinden warum.
Warten Sie, werfen Sie PublishSubject auf beobachtbar? Sollte das nicht mit 'onClickSubject.hide()' geschehen? – Tuby
Hey, @Tuby! Du hast recht! Ich sollte onClickSubject.hide() verwenden, andernfalls werfe ich PublishSubject auf beobachtbar, was bereits beobachtbar ist. – Regulo
Ja, aber das bedeutet, dass Sie die innere Klasse des Viewholders erstellen müssen, was eine schlechte Idee ist, weil Sie den Verweis auf die äußere Klasse beibehalten – mayosk