Android ListView 技巧 (一) Android ListView Header
关键字: Android ListView Header
最近使用OPhone SDK来开发一个应用程序。在使用的过程中,出现了一个问题,个人估计是Ophone底层framework的bug。但是没有底层的支持,苦于没有办法,所以只能自己绕过。
一:ListView Header的使用
在各用控件的使用中,估计ListView是最常用的一个,各种各样的市场都使用ListView来显示数据。但是也有不使用ListView而使用LiearLayout自己向里添加各种组件的(相信这种实现方式的市场的开发人员也不怎么样,会浪费大量的资源,使用更多的内存)。
以“以掌上应用汇”为例:
它在上面显示4个推荐的内容,下面使用一个个ITEM来显示各个应用程序。
使用过ListView开发的人都知道,在ListView外边是不能再嵌套ScrollView的,所以想要头部这种不同的结构显示出来,并且随着ListView的滚动而滚动其实是很简单的。但是网络上有很多种关于这样的讨论,如何的实现,实在不知道为什么。
首先是两种设计:
1,固定的头部,这种头部不随着ListView的滚动而滚动。
就像excel中A,B,C,D,E这样的列名,它们不会随着内容的滚动而滚动。好处当然是可以一直 的指示使用代表的内容是什么意义,坏处是会占用用户的操作空间。
2,不固定的头部,头部不随着ListView的滚动而滚动
就像下图中的,姓名,性别,年龄这样的列名,它他们会随着内容的滚动而变得不可见。它的好处和坏处正好和固定的反过来。
像上面的图中的“以掌上应用汇”的例子,它很明显不能使用固定的头部,因为设备的可视区域本来就小,而且头部占用的空间也多。
两种设计的实现:
1,固定的头部实现起来很简单,把View放在ListView的外边就可以,示例:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">
<include layout="@layout/fixed_header_view" />
<ListView android:id="@id/android:list" android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<TextView android:id="@id/android:empty"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/empty_msg"/>
</LinearLayout>
2,不固定头部的实现,其实实现起来真的很简单。
在应用程序中把头部inflate出来,然后调用ListView的下面两个方法中的一个就可以(具体请参考API doc)
public void addHeaderView(View v);
public void addHeaderView(View v, Object data, boolean isSelectable);
就可以为ListView添加一个头部,它会随着ListView的滚动而滚动。但是要注意的是
2-1:addHeaderView必须得在setAdapter之前被调用
2-2:在AdapterView.OnItemClickListener的public void onItemClick(AdapterView<?> parent, View view, int position,long id) 中,position中计算header的,就是说,你给ListView的setAdapter的数据会从headerCount开始计数,所以如果你想在自己的Adapter中取数据,你需要减去headerCount。
示例:
// SOME CODE init ListView and setHeader
ListView listView = getListView();
View header = LayoutInflater.from(this).inflate(R.layout.scrolled_header_view, null);
// Do another init to set content for header and add event handler.
listView.addHeaderView(header);
listView.setAdapter(myAdapter);
在响应public void onItemClick(AdapterView<?> parent, View view, int position,long id)时
position -= listView.getHeaderViewsCount(); // 需要减去headerCount
MyItem item = myAdapter.getItem(position);
网络上有关于header使用的介绍,大部分是想在ListView外添加一个ScrollView,可是这样的方案是不可行的。所以就有自己使用ListView来添加各种View来实现,这些View必须被创建出来占用大量的宝贵资源,这样就无法使用ListView的好处,而且代码也不好维护。
像这种只有一个View与其它项目不同的,可以使用header。因为ListView的状态是由系统来维护的,不但能节约代码,方便维护,而且能节约内存的使用。在下一节会介绍多种View在一个ListView中的实现。
转载于:https://www.cnblogs.com/firecode/archive/2012/09/20/2694711.html
Android ListView 技巧 (一) Android ListView Header相关推荐
- Android开发技巧!Android开发大佬的百度,美团,快手等大厂Offer收割之旅,附超全教程文档
想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. 本文参考了目前大部分 Android 应用启动优化的方案,将大家的方案做一个汇总,如果你有这方 ...
- Android开发技巧!Android面试知识点总结宝典助你通关!终局之战
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 组件化如何实现,组件化与插件化的差别在哪里,该怎么选型 心理分析:面试官从架构层次 了解求职者是否用过 模块化 组 ...
- android开发技巧杂谈
android开发技巧一 android的一些常用包是发布在国外的,所以一些包,我们下载不下来,我们可以使用阿里云的镜像地址(maven { url 'https://maven.aliyun.com ...
- Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片...
一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...
- android开发小技巧:实现listview异步加载图片
2019独角兽企业重金招聘Python工程师标准>>> 针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师 ...
- 【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...
- Android性能优化之提高ListView性能的技巧
ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能. 1.在adapter中的ge ...
- Android之下拉刷新的ListView
不废话,代码里面注释很详细,直接上代码: 自定义的RefreshableListView代码: 1 public class RefreshableListView extends ListView ...
- Android HorizontalScrollView 水平滑动 在listview上面动态添加图片
Android HorizontalScrollView 水平滑动 listview 上动态添加图片 最近遇到了个 在listview展示广告的需要动态添加图片 如图: 使用了 horizo ...
- android 新闻功能列表,android listview实现新闻列表展示效果
本文实例为大家分享了android listview列表展示效果的具体代码,供大家参考,具体内容如下 1.封装一些新闻数据 2.使用listview展示出来 3.设置条目点击事件,点击后跳转浏览器查看 ...
最新文章
- 并发编程——进程——理论知识
- 按照演算,整个宇宙将会陷入无边的黑暗
- LaTeX中巨算符下面输入两行内容的方法
- 反向传播和梯度下降的区分
- magento2 发邮件
- 'gbk' codec can't decode byte 0x9d in position 7674: illegal multibyte sequence
- 学习Java的9张思维导图
- 何钦铭c语言程序设计第三版课本,C语言程序设计(第3版)
- 2020 豆瓣电影榜单出炉,直接在豆瓣上看电影吧
- 不要随意设置随机数种子
- Java渐变进度条_很好看的java进度条
- ArcGIS的mxd文档存储为相对路径
- 记住键盘快捷键大全 提高电脑操作速度
- vscode修改代码颜色
- C语言”%p”的意思-----printf(%p,p)
- 协同办公“战役”,华为输了吗?
- java 批量爬取国图 marc信息,用txt和excel保存
- 网站推广软件-最新网站推广软件【推荐】
- 【例8-13】用字符指针操作字符串
- 32u图腾服务器机柜型号,图腾网络机柜-G36632-32U1.6米机柜
热门文章
- 单片机c语言跑马灯实验报告,单片机跑马灯实验报告
- linux 零拷贝golden,GoldenGate碎碎念
- 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)...
- 你可能不知道Flutter到底有多火
- 为什么每天工作那么努力,却无法突破职场瓶颈?
- python基础知识——函数(上)
- c#位数不够0补充完_人教版四年级上册数学第六单元《除数是两位数的除法》
- 乐安全 支持x86_android-x86-4.4-r2运行程序总是停止运行怎么处理
- php mysql pdo 多次_一次php脚本执行过程中多次实例化PDO的情景分析
- open函数_全!Python函数和文件操作合集(长文系列第三篇)