如何使用RxJava处理回收站视图的项目点击

J W*_*eld 13 android rx-java rx-android android-recyclerview

我有兴趣了解回应物品点击回收者视图的最佳方法是什么.

通常我会向ViewHolder添加一个onclick()侦听器,并通过接口将结果传回活动/片段.

我想在onBindViewHolder中添加一个Observable,但我不想为每个项目绑定创建一个新的Observable.

epo*_*ool 12

您可以使用RxBinding,然后在适配器内部创建一个主题,然后将所有事件重定向到该主题,只需创建一个主题的getter作为一个observable,最后只需订阅该observable即可.

private PublishSubject<View> mViewClickSubject = PublishSubject.create();

public Observable<View> getViewClickedObservable() {
    return mViewClickSubject.asObservable();
}

@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup pParent, int pViewType) {
    Context context = pParent.getContext();
    View view = (View) LayoutInflater.from(context).inflate(R.layout.your_item_layout, pParent, false);
    ViewHolder viewHolder = new ViewHolder(view);

    RxView.clicks(view)
            .takeUntil(RxView.detaches(pParent))
            .map(aVoid -> view)
            .subscribe(mViewClickSubject);

    return viewHolder;
}
Run Code Online (Sandbox Code Playgroud)

一个用法示例可能是:

mMyAdapter.getViewClickedObservable()
        .subscribe(view -> /* do the action. */);
Run Code Online (Sandbox Code Playgroud)

  • 你在哪里取消订阅? (3认同)