-->

使用RxJava2 + RxBinding RecyclerView项目点击片段更换后不工作(Rec

2019-09-29 08:26发布

我有一个片段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))线。 我认为这是需要打破RxView点击的强绑定与该RecyclerView时,不显示它(独立)。 我怎样才能解决这个问题? 我期待解决使用安装/拆卸的事件之一的问题,任何建议将是巨大的! 谢谢。

Answer 1:

要回答你的问题和意见,我送我的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
}


文章来源: RecyclerView item click using RxJava2 + RxBinding not working after Fragment replacements