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

2023-12-29

我在 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(使用前将#替换为@)

片段替换后,使用 RxJava2 + RxBinding 的 RecyclerView 项目单击不起作用 的相关文章

随机推荐

  • 具有外部域注册商的 Route 53?

    我创建了一个 Route 53 托管区域 其中包含 SOA NS 记录和 A 记录 A 记录指向我在 AWS 上托管的 Web 实例 在注册商上 我需要使用什么才能让域使用 Amazon Route 53 仅仅是名称服务器吗 或者我需要 A
  • 创建事件是否是将 XF OnAppearing 变成异步方法的有效方法?

    我最近看到了关于如何将应用程序 OnStart 变成异步 OnStart 的建议 protected override void OnStart this started onStarted Subscribe to event start
  • 创建配置节处理程序时出错

    我有一个 dot NET 4 0 Web 应用程序 定义了自定义部分
  • 具有单行 TabPanel 和溢出面板的 TabControl

    我想将 WPF TabControl 的功能更改为仅生成一行 并为每个其他项目 如 ToolBar ToolBarOverflowPanel 创建一个溢出弹出窗口 目前 VisualStudio 中选项卡的显示方式相同 这就是我得到的
  • Swift 3 GCD 锁定变量和 block_and_release 错误

    我正在使用 Swift 3 GCD 来在我的代码中执行一些操作 但我越来越 dispatch call block and release经常出错 我想这个错误背后的原因是因为不同的线程修改相同的变量 但我不知道如何解决问题 这是我的代码和
  • 从参数化测试访问夹具(例如,capsys)

    我在参数化测试中访问固定装置 在本例中为 capsys 时遇到问题 目前我正在使用一个虚拟夹具来完成这项工作 import pytest pytest fixture def params request from collections
  • 如何在 Swift 中从文件(而不是整个文件)读取数据块

    假设我有一个 8 字节长的文件 仅包含 ASCII 字符 brownfox 我不想加载 2 个字节的块 而不是加载整个文件并处理 if UInt8 并对 2 字节大小的块进行操作 因此操作如下 load br从文件 和not整个文件 对数据
  • 云代码函数运行两次

    我写了一个运行良好的云函数 有时 同一用户会多次执行此函数 我确保客户端 Android 应用程序只请求一个请求 经过一些调试后 我注意到如果连接不良就会出现此问题 我可能是正确的 也可能不正确 如何克服这样的问题 正如评论中所述 我也不相
  • 如何使用 php 在数据库中插入和检索图像

    我正在尝试上传会员个人资料的图像并使用 php 将其存储在数据库中 然后检索它 但它对我不起作用 这就是我尝试插入图像的方法
  • 通过删除 numpy 数组来释放内存

    我编写了一个带有 GUI 的疲劳分析程序 该程序获取有限元模型每个元素的单位载荷的应变信息 使用 np genfromtxt loadcasefilename txt 读取载荷工况 然后进行一些疲劳分析并将每个元素的结果保存在另一个数组中
  • 多个 CSS @media 条件似乎不起作用

    我正在尝试修改 CSS 中的几个类以适应不同的屏幕分辨率 我的目标是 默认应用的 CSS 宽度为 1200 嵌入在 CSS 中的媒体查询 用于 601 到 601 之间的分辨率 1199 px 这不起作用 嵌入在 CSS 中的媒体查询 分辨
  • django 的递归查询集

    我有这个模型引用自身以允许构建一棵树 class PartCategory models Model parent models ForeignKey PartCategory on delete models DO NOTHING nul
  • 如何合并同一列中的单元格,应用行跨度?

    在我的报告的 jrxml 设计中 我的详细信息部分有一列为特定组打印相同的内容 例如 如果我有一个国家列美国 下一列包含其州 每个条目都会重复 美国国家 地区 所以我需要合并具有美国价值的国家 地区单元格 我需要合并列中具有相同值的所有单元
  • 为什么使用 from __future__ import print_function 会破坏 Python2 风格的打印? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我是Python编程新手 我试图用分隔符和结尾打印出来 但它仍然给我一个语法错误 我正在使用Python 2 7 这是我的代码 f
  • 使用按键绑定进行 JLabel 移动

    我在 swing 中制作了一个简短的脚本 人们不断告诉我 我需要使用按键绑定来让 Jlabel 移动 但我不知道该怎么做 任何人都知道如何以不使用按键侦听器的方式实现按键绑定 或者如果我添加按钮 这将是一个问题 import java aw
  • 网格调用时出错

    在尝试使用生成任何图时ggplot2 给出以下错误 Error in grid Call C textBounds as graphicsAnnot x label x x x y X11 font adobe helvetica s s
  • Flask - 将对象直接存储在会话中[重复]

    这个问题在这里已经有答案了 我想知道是否可以直接在 Flask 会话中存储对象 而不需要重写序列化器 为了使其正常工作 我需要在班级中实现任何功能吗 示例代码如下 这就是我想要的样子 然而 当你尝试执行它时 它会抛出一个错误TypeErro
  • Xen、QEMU 和 KVM 之间有什么区别?

    我知道Xen使用QEMU 而KVM是QEMU的一个分支 那么 KVM 包括 Xen 添加到 QEMU 中吗 是什么名字 Thanks QEMU 是一个功能强大的模拟器 这意味着它可以模拟多种处理器类型 Xen 使用 QEMUHVM http
  • Rails:application_helper.rb 中定义的方法无法被categories_controller.rb 识别

    更多新手问题 据我了解 如果我在应用程序帮助程序中定义一个方法 则整个应用程序代码都可以使用该方法 在我的应用程序助手中 我有 def primary user is admin if current user user login rol
  • 片段替换后,使用 RxJava2 + RxBinding 的 RecyclerView 项目单击不起作用

    我在 Fragment 中有一个 RecyclerView 项目点击是使用 RxJava2 处理的 如中所述这个答案 https stackoverflow com a 39962415 2341815 它在非片段中运行良好 private