2
rxjava2와 호환되는 rxbindings 스냅 샷 버전을 사용하고 있으며 모든 것이 완벽하게 작동하지만 recyclerView 어댑터 내부에서 클릭 이벤트를 처리하는 방법을 알지 못합니다. "rxjava 1 way"를 사용하려고했지만 작동하지 않습니다.재활용 어댑터에서 Rxjava2보기 클릭
RxJava 1.0 :
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 :
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);
}
}
및 활동에
이mAdapter.getItemClickSignal()
.subscribe(new Consumer<Integer>() {
@Override
public void accept(@NonNull Integer integer) throws Exception {
Log.d(TAG, position);
}
});
같은 접근 방식은 rxjava2와 함께 작동하지 둘 다 어떤 예외가 발생하고 있지 않습니다 나는 이유를 알 수 없었다.
잠깐, PublishSubject를 관찰 가능하도록 전송 중입니까? 'onClickSubject.hide()'로 끝내면 안 되는가? – Tuby
이봐, @ 투비! 네가 옳아! onClickSubject.hide()를 사용해야합니다. 그렇지 않으면 Observable에 PublishSubject를 캐스팅합니다. 이미 관찰 가능합니다. – Regulo
네,하지만 이것은 뷰홀 (viewholder) 내부 클래스를 만들어야한다는 것을 의미합니다. 이것은 외부 클래스 – mayosk