我在 Fragment 中有一个 RecyclerView,项目点击是使用 RxJava2 处理的,如中所述这个答案 https://stackoverflow.com/a/39962415/2341815,它在非片段中运行良好。
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 的强绑定。我该如何解决这个问题?我正在寻求使用附加/分离事件之一来解决问题,任何建议都会很棒!谢谢。
为了回答您的问题和评论,我发送了 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)