Ruw*_*han 1 android android-fragments android-recyclerview rx-binding rx-java2
我在Fragment中有一个RecyclerView,如该SO回答中所述,使用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;
}
Run Code Online (Sandbox Code Playgroud)
片段中的RecyclerView只能正常运行一次。在项目单击片段上替换为另一个片段。后按后,出现RecyclerView片段,但单击不再起作用。
如果我删除该.takeUntil(RxView.detaches(parent))行,它将起作用。我认为有必要在RecyclerView未显示(分离)时破坏RxView单击的牢固绑定。我该如何解决这个问题?我正在寻找使用附加/分离事件之一解决问题的方法,任何建议都很棒!谢谢。
为了回答您的问题和评论,我将为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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2994 次 |
| 最近记录: |