RecyclerView 项目单击使用 RxJava2 + RxBinding 在片段替换后不起作用

RecyclerView item click using RxJava2 + RxBinding not working after Fragment replacements

我在片段中有一个 RecyclerView,项目点击是使用 RxJava2 处理的,如 中所述,它在非片段中工作正常。

private PublishSubject<Place> itemViewClickSubject = PublishSubject.create();

@Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.search_result_view, parent, false);

        ViewHolder viewHolder = new ViewHolder(view);

        // convert click events into reactive stream
        RxView.clicks(view)
                .takeUntil(RxView.detaches(parent))
                // viewHolder.getPlace() is null until it get bound
                .map(__ -> viewHolder.getPlace())
                .subscribe(itemViewClickSubject);

        return viewHolder;
    }

片段中的 RecyclerView 只能正常工作一次。项目点击片段被替换为另一个片段。按下后,RecyclerView 片段出现,但点击不再起作用。

如果我删除 .takeUntil(RxView.detaches(parent)) 行,它会起作用。我认为当 RecyclerView 未显示(分离)时,需要打破 RxView click 与 RecyclerView 的强绑定。我该如何解决这个问题?我希望使用 attach/detach 事件之一来解决问题,任何建议都很好!。谢谢

为了回答您的问题和评论,我将 RecylerView + RxJava 的完整解决方案发送给您:

private PublishSubject<Place> itemViewClickSubject = PublishSubject.create();

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
    RxView.clicks(viewHolder.itemView) //viewHolder.itemView here You have access to view
            .map(aVoid -> viewHolder.getPlace())
            .subscribe(itemViewClickSubject);
}

@Override
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
    itemViewClickSubject.onComplete(); //here we avoid memory leaks
}