gpt4 book ai didi

android - RecyclerView 项目单击使用 RxJava2 + RxBinding 在 fragment 替换后不起作用

转载 作者:行者123 更新时间:2023-11-29 14:44:34 25 4
gpt4 key购买 nike

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

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;
}

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

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

最佳答案

为了回答您的问题和评论,我发送了 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
}

关于android - RecyclerView 项目单击使用 RxJava2 + RxBinding 在 fragment 替换后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44433115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com