当前位置: 首页 > article >正文

安卓开饭-ScrollView内嵌套了多个RecyclerView,只想与其中一个RecyclerView有联动

在 Android 开发中,将 RecyclerView 嵌套在 ScrollView 内通常会导致性能问题和滚动冲突,应尽量避免这种设计。以下是原因和替代方案:

为什么不推荐 RecyclerView + ScrollView?​​
  • 性能损耗​
    RecyclerView 本身已自带高效回收复用机制,嵌套在 ScrollView 中会强制 RecyclerView 一次性加载所有子项(失去回收优势),导致内存和渲染性能下降。
  • 滚动冲突​
    内层 RecyclerView 和外层 ScrollView 会竞争触摸事件,导致滚动不流畅或无法滚动。
  • 测量问题
    ScrollView 要求子视图有固定高度,而 RecyclerView 的高度是动态计算的,可能导致布局错乱。

核心思路​

  • ​禁用不需要联动的 RecyclerView 的滚动​
    通过 setNestedScrollingEnabled(false) 或 XML 属性让特定 RecyclerView 不响应外部 ScrollView 的滚动事件。
  • ​动态控制滚动行为​
    通过 OnScrollListener 或自定义 NestedScrollingParent 协调滚动逻辑。

XML配置

<androidx.recyclerview.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:nestedScrollingEnabled="false" />  <!-- 关键:禁止联动 -->

代码配置

// 禁止 RecyclerView1 联动
recyclerView1.isNestedScrollingEnabled = false// 允许 RecyclerView2 联动
recyclerView2.isNestedScrollingEnabled = true

ListView时期古老的方案- 自定义ListView 让其直接平铺

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;public class ScrollDisabledListView extends ListView {private int mPosition;public ScrollDisabledListView(Context context) {super(context);}public ScrollDisabledListView(Context context, AttributeSet attrs) {super(context, attrs);}public ScrollDisabledListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {final int actionMasked = ev.getActionMasked() & MotionEvent.ACTION_MASK;if (actionMasked == MotionEvent.ACTION_DOWN) {// 记录手指按下时的位置mPosition = pointToPosition((int) ev.getX(), (int) ev.getY());return super.dispatchTouchEvent(ev);}if (actionMasked == MotionEvent.ACTION_MOVE) {// 最关键的地方,忽略MOVE 事件// ListView onTouch获取不到MOVE事件所以不会发生滚动处理return true;}// 手指抬起时if (actionMasked == MotionEvent.ACTION_UP|| actionMasked == MotionEvent.ACTION_CANCEL) {// 手指按下与抬起都在同一个视图内,交给父控件处理,这是一个点击事件if (pointToPosition((int) ev.getX(), (int) ev.getY()) == mPosition) {super.dispatchTouchEvent(ev);} else {// 如果手指已经移出按下时的Item,说明是滚动行为,清理Item pressed状态setPressed(false);invalidate();return true;}}return super.dispatchTouchEvent(ev);}
}

相关文章:

安卓开饭-ScrollView内嵌套了多个RecyclerView,只想与其中一个RecyclerView有联动

在 Android 开发中&#xff0c;将 RecyclerView 嵌套在 ScrollView 内通常会导致性能问题和滚动冲突&#xff0c;应尽量避免这种设计。以下是原因和替代方案&#xff1a; 为什么不推荐 RecyclerView ScrollView&#xff1f;​​ 性能损耗​ RecyclerView 本身已自带高效回收复…...

Linux 系统中的文件系统层次结构和重要目录的用途。

Linux系统目录结构采用分层布局方式&#xff0c;通过根目录"/"组织管理各类文件。以下为核心目录说明&#xff1a; 一、主要目录结构 1. / : 根目录&#xff0c;所有文件和目录的起点 2. /bin : 存储基础用户命令(ls/cp/mv等) 3. /boot : 存放系统引导程序和…...

从攻击者角度来看Go1.24的路径遍历攻击防御

目录 一、具体攻击示例 程序 攻击步骤&#xff1a; 二、为什么攻击者能成功&#xff1f; 分析 类比理解 总结 三、TOCTOU 竞态条件漏洞 1、背景&#xff1a;符号链接遍历攻击 2. TOCTOU 竞态条件漏洞 3. 另一种变体&#xff1a;目录移动攻击 4. 问题的核心 四、防…...

使用 SiamMask 实现单目标逐帧跟踪与掩码中心提取

使用 SiamMask 实现单目标逐帧跟踪与掩码中心提取 使用 SiamMask 实现逐帧掩码中心提取与目标跟踪1. 功能概述2. 输入要求3. 使用说明4. 可选扩展5. 常见问题排查6. 脚本代码(siam\_one\_frame.py)使用 SiamMask 实现逐帧掩码中心提取与目标跟踪 本文介绍基于 SiamMask 的逐…...

Qt中的RCC

Qt资源系统(Qt resource system)是一种独立于平台的机制&#xff0c;用于在应用程序中传输资源文件。如果你的应用程序始终需要一组特定的文件(例如图标、翻译文件和图片)&#xff0c;并且你不想使用特定于系统的方式来打包和定位这些资源&#xff0c;则可以使用Qt资源系统。 最…...

【实战解决方案】Spring Boot+Redisson构建高并发Excel导出服务,彻底解决系统阻塞难题

【实战解决方案】Spring BootRedisson构建高并发Excel导出服务&#xff0c;彻底解决系统阻塞难题 一、问题背景&#xff1a;痛苦的系统卡顿经历 作为电商后台开发者&#xff0c;我们经常遇到这样的场景&#xff1a;运营人员在后台点击"导出订单数据"后&#xff0c;…...

Delphi 12.3调用Chrome/edge内核实现DEMO源码

DELPHI使用调用Chrome/Edge内核浏览器&#xff0c;虽然旧的WebBrowser也还可以用&#xff0c;但大势所趋&#xff0c;新版的已经不需要使用第三方的组件了&#xff0c;算是全内置的开发了&#xff0c;不废话 Unit1 源码 Form 源码 unit Unit1;interfaceusesWinapi.Windows, W…...

GitDiagram - GitHub 仓库可视化工具

GitDiagram - GitHub 仓库可视化工具 项目链接&#xff1a;https://github.com/ahmedkhaleel2004/gitdiagram 将任何 GitHub 仓库转换为交互式架构图&#xff0c;只需替换 URL 中的 hub 为 diagram。 ✨ 核心功能 即时可视化&#xff1a;将代码库结构转换为系统设计/架构图…...

【Linux】基于虚拟机实现网络的管理

通过学习我们需要掌握&#xff1a;IP 的配置、子网掩码、网关、DNS 服务器】 一、配置虚拟机的IP地址 1. 查看虚拟机 IP 地址&#xff08;可以看到三个地址&#xff09; ip a&#xff08;即ip address show&#xff09; 其中可以看到&#xff1a; Linux系统识别的以太网接口…...

QT 使用QPdfWriter和QPainter绘制PDF文件

QT如何生产pdf文件&#xff0c;网上有许多文章介绍&#xff0c;我也是看了网上的文章&#xff0c;看他们的代码&#xff0c;自己琢磨琢磨&#xff0c;才有了本编博客&#xff1b; 其他什么就不详细说了&#xff0c;本篇博客介绍的QPdfWriter和QPainter绘制PDF文件&#xff1b;…...

英迈国际Ingram Micro EDI需求分析

Ingram Micro&#xff08;英迈国际&#xff09;成立于1979年&#xff0c;是全球领先的技术和供应链服务提供商&#xff0c;总部位于美国加州尔湾。公司致力于连接全球的技术制造商与渠道合作伙伴&#xff0c;业务涵盖IT分销、云服务、物流和供应链优化等多个领域。Ingram Micro…...

linux - 权限的概念

目录 用户权限 超级用户与普通用户的区别 超级用户&#xff08;root&#xff09;&#xff1a; 普通用户&#xff1a; 切换用户身份 使用sudo执行高权限命令 用户管理 用户组管理 文件权限 文件访问者类别 基本权限 权限表示方法 权限修改 chmod chown chgrp u…...

函数的定义与调用 -《Go语言实战指南》

函数是 Go 编程的基本单元。Go 支持普通函数、匿名函数、高阶函数&#xff08;函数作为参数或返回值&#xff09;以及多返回值机制。 一、函数的定义格式 func 函数名(参数列表) 返回值列表 {// 函数体 } 示例&#xff1a; func add(a int, b int) int {return a b } 说明&…...

理解 Token 索引 vs 字符位置

以下是对“理解 Token 索引与字符位置的区别”的内容整理&#xff0c;条理清晰&#xff0c;结构完整&#xff0c;保持技术细节&#xff0c;方便阅读&#xff0c;无多余解释&#xff1a; &#x1f50d; 理解 Token 索引 vs 字符位置 文本分块方法中返回的索引是 token 索引&…...

【Vue】CSS3实现关键帧动画

关键帧动画 两个重点keyframesanimation子属性 实现案例效果展示&#xff1a; 两个重点 keyframes 和 animation 作用&#xff1a;通过定义关键帧&#xff08;keyframes&#xff09;和动画(animation)规则&#xff0c;实现复杂的关键帧动画。 keyframes 定义动画的关键帧序列…...

AD 多层线路及装配图PDF的输出

装配图的输出&#xff1a; 1.点开‘智能PDF’ 2. 设置显示顶层&#xff1a; 设置显示底层&#xff1a; 多层线路的输出 同样使用‘智能PDF’...

MultiTTS 1.7.6 | 最强离线语音引擎,提供多音色无障碍朗读功能,附带语音包

MultiTTS是一款免费且支持离线使用的文本转语音&#xff08;TTS&#xff09;工具&#xff0c;旨在为用户提供丰富的语音包选项&#xff0c;实现多音色无障碍朗读功能。这款应用程序特别适合用于阅读软件中的离线听书体验&#xff0c;提供了多样化的语音选择&#xff0c;使得听书…...

基于自校准分数的扩散模型在并行磁共振成像中联合进行线圈灵敏度校正和运动校正|文献速递-深度学习医疗AI最新文献

Title 题目 Joint coil sensitivity and motion correction in parallel MRI with aself-calibrating score-based diffusion model 基于自校准分数的扩散模型在并行磁共振成像中联合进行线圈灵敏度校正和运动校正 01 文献速递介绍 磁共振成像&#xff08;MRI&#xff09;…...

OCR发票识别API实现

OCR发票识别API实现 1. 阿里云OCR发票识别2. Tesseract OCR3. 利用java调用大模型进行识别4. 飞桨PaddleOCR 1. 阿里云OCR发票识别 阿里云OCR发票识别 示例&#xff1a; 接口&#xff1a;https://dgfp.market.alicloudapi.com/ocrservice/invoice 参数&#xff1a;{"img&…...

实战案例:采集 51job 企业招聘信息

本文将带你从零开始&#xff0c;借助 Feapder 快速搭建一个企业级招聘信息数据管道。在“基础概念”部分&#xff0c;我们先了解什么是数据管道和 Feapder&#xff1b;“生动比喻”用日常场景帮助你快速理解爬虫组件&#xff1b;“技术场景”介绍本项目中如何使用代理等采集策略…...

从AlphaGo到ChatGPT:AI技术如何一步步改变世界?

从AlphaGo到ChatGPT&#xff1a;AI技术如何一步步改变世界&#xff1f; 这里给大家分享一个人工智能学习网站。点击跳转到网站。 https://www.captainbed.cn/ccc 前言 在科技发展的历史长河中&#xff0c;人工智能&#xff08;AI&#xff09;技术无疑是最为璀璨的明珠之一。从…...

推荐6大wordpress模板资源网站

1. 模板之家 模板之家是一个提供丰富网站模板资源的平台。它涵盖了多种类型的模板&#xff0c;包括企业官网、个人博客、电商网站等&#xff0c;能够满足不同用户对于网站搭建的需求。其模板设计精美&#xff0c;功能多样&#xff0c;且注重用户体验&#xff0c;方便用户快速搭…...

AI 编程革命:腾讯云 CodeBuddy 如何重塑开发效率?

引言 在传统开发流程中&#xff0c;开发者常需依赖 SDK 文档或反复调试来获取云资源信息。而随着 AI 技术爆发式发展&#xff0c;腾讯云推出的 CodeBuddy 正以对话式编程颠覆这一模式 —— 只需自然语言描述需求&#xff0c;即可直接生成可执行代码。作为腾讯混元大模型与 Dee…...

星海智算云平台部署GPT-SoVITS模型教程

背景 随着 GPT-SoVITS 在 AI 语音合成领域的广泛应用&#xff0c;越来越多的个人和团队开始关注这项前沿技术。你是否也在思考&#xff0c;如何快速、高效地部署并体验这款强大的声音克隆模型&#xff1f;遗憾的是&#xff0c;许多本地部署方案不仅配置复杂&#xff0c;而且对…...

15:00开始面试,15:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到4月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…...

python 的 ​uv、pip​ 和 ​conda​ 对比和技术选型

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…...

20250515通过以太网让VLC拉取视熙科技的机芯的rtsp视频流的步骤

20250515通过以太网让VLC拉取视熙科技的机芯的rtsp视频流的步骤 2025/5/15 20:26 缘起&#xff1a;荣品的PRO-RK3566适配视熙科技 的4800W的机芯。 1080p出图预览的时候没图了。 通过105的机芯出图确认 荣品的PRO-RK3566 的硬件正常。 然后要确认 视熙科技 的4800W的机芯是否出…...

GPU异步执行漏洞攻防实战:从CUDA Stream竞争到安全编程规范

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 引言 在高校实验室的GPU加速计算研究中&#xff0c;多卡并行编程已成为提升深度学习训练效…...

UE5.3 C++ 房屋管理系统(二)

三.当房屋生成成功&#xff0c;我们就需要把TMap里的数据存到数据库里。不然一点停止运行&#xff0c;就会所以数据都不见了。这里使用DataTable来存储。 1.DataTable是UE常用的表&#xff0c;虽然不是专门用来存档的&#xff0c;但也可以这么用。 DataTable表&#xff0c;实…...

VSCode1.101.0便携版|中英文|编辑器|安装教程

软件介绍 Visual Studio Code是微软推出的一个强大的代码编辑器&#xff0c;功能强大&#xff0c;操作简单便捷&#xff0c;还有着良好的用户界面&#xff0c;设计得很人性化&#xff0c;旨在为所有开发者提供一款专注于代码本身的免费的编辑器。 软件安装 1、 下载安装包…...