ListView或GridView上添加能一起滚动的Button效果的解决思路

简介: ListView或GridView上添加能一起滚动的Button效果的解决思路

思路Ⅰ:添加 Head View(推荐)

调用 ListView#addHeadView() 或 addFooterView() 来定制头尾特殊布局。


缺点:


数据下标影响。ListView的第一个元素变成了Button,要注意在adapter的getView()当中特别处理下标为0的情况。包括UI显示和事件监听。


GridView控件官方没有提供addHeadView()方法。


备注:


其实AOSP项目中Gallery APP已经有ASIS提供的GridView的addHeadView()方法,实际使用过,有显示的问题,可能这也是AOSP没有将这个API公开的原因之一


如果不是GridView的话,个人比较推荐这种方案。

思路Ⅱ:Adapter#getView() 里根据 Index 灵活定制 layout

当 index 为 0 的时候加载 Button 布局,其他为一般布局,具体不再展开。

思路Ⅲ:ScrollView 嵌套 Button + ListView

当上述两种思路均无法满足需求的时候可以考虑此思路,缺点不少,但不失是一个折衷方案。

缺点:

UI 问题:Android官方不建议在ScrollView内嵌套ListView或GridView,因为有如下Bug:


ListView在ScrollView中的高度会显示不完整,需要覆写ListView的onMeasure()复写最大 Size 的 Spec 实例解决这个问题


ListView在ScrollView中不能实时的滚动到顶部,需要在onWindowFocusedChanged()中手动调节ListView的位置


大体:

 public class ListViewForScrollView extends ListView {
     ...
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         // Int 值 32 位右移 2 位之后作为 Size 创建 Spec 实例
         // Spec 一共 32 位,高 2 位需要放 Mode
         // ListView 高度按照全部展开去计算
         int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
         MeasureSpec.AT_MOST);
         super.onMeasure(widthMeasureSpec, expandSpec);
     }
 }

性能影响:覆写ListView的onMeasure()会导致ListView的项目在只看到部分item的情况下,实际上已经将全部item加载完毕,会对性能造成影响


其他影响:正因为覆写ListView的onMeasure()导致ListView的全部item加载完毕,getFirstVisiblePosition()永远是0,getLastVisiblePosition永远是item总数。这种情况下,要用到getFirstVisiblePosition()和getLastVisiblePosition()的话,得到的结果是不正确的。

优点:

并不会影响到加载的数据的下标,不用在adapter的getView()当中特别处理下标。

相关文章
|
存储 机器学习/深度学习 传感器
数字图像处理(二) 数字图像处理基础(上)
数字图像处理(二) 数字图像处理基础(上)
444 0
|
机器学习/深度学习 存储 算法
|
C# 计算机视觉 存储
C# 中使用OPenCV(Emgu)心得
原文:C# 中使用OPenCV(Emgu)心得   首先介绍一下自己的情况,2010年的3月份开始接触学习C#编程,之前C#和OpenCV都是零基础,由于全都是自学进度比较慢,中间也走了不少弯路。进过三个月自己的学习与探索,对C#中使用OpenCV也算是有点心得,希望对初学者有所帮助,也希望大牛们进行指点。
2584 0
|
15天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
6天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
9天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
885 29