关键字: 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相关推荐

  1. Android开发技巧!Android开发大佬的百度,美团,快手等大厂Offer收割之旅,附超全教程文档

    想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. 本文参考了目前大部分 Android 应用启动优化的方案,将大家的方案做一个汇总,如果你有这方 ...

  2. Android开发技巧!Android面试知识点总结宝典助你通关!终局之战

    本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注 面试官: 组件化如何实现,组件化与插件化的差别在哪里,该怎么选型 心理分析:面试官从架构层次 了解求职者是否用过 模块化 组 ...

  3. android开发技巧杂谈

    android开发技巧一 android的一些常用包是发布在国外的,所以一些包,我们下载不下来,我们可以使用阿里云的镜像地址(maven { url 'https://maven.aliyun.com ...

  4. Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片...

    一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...

  5. android开发小技巧:实现listview异步加载图片

    2019独角兽企业重金招聘Python工程师标准>>> 针对listview异步加载图片这个问题,麦子学院android开发老师讲了一种非常实用的方法,麦子学院android开发老师 ...

  6. 【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片

    一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...

  7. Android性能优化之提高ListView性能的技巧

    ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能. 1.在adapter中的ge ...

  8. Android之下拉刷新的ListView

    不废话,代码里面注释很详细,直接上代码: 自定义的RefreshableListView代码: 1 public class RefreshableListView extends ListView ...

  9. Android HorizontalScrollView 水平滑动 在listview上面动态添加图片

    Android HorizontalScrollView   水平滑动    listview 上动态添加图片 最近遇到了个 在listview展示广告的需要动态添加图片 如图: 使用了 horizo ...

  10. android 新闻功能列表,android listview实现新闻列表展示效果

    本文实例为大家分享了android listview列表展示效果的具体代码,供大家参考,具体内容如下 1.封装一些新闻数据 2.使用listview展示出来 3.设置条目点击事件,点击后跳转浏览器查看 ...

最新文章

  1. 并发编程——进程——理论知识
  2. 按照演算,整个宇宙将会陷入无边的黑暗
  3. LaTeX中巨算符下面输入两行内容的方法
  4. 反向传播和梯度下降的区分
  5. magento2 发邮件
  6. 'gbk' codec can't decode byte 0x9d in position 7674: illegal multibyte sequence
  7. 学习Java的9张思维导图
  8. 何钦铭c语言程序设计第三版课本,C语言程序设计(第3版)
  9. 2020 豆瓣电影榜单出炉,直接在豆瓣上看电影吧
  10. 不要随意设置随机数种子
  11. Java渐变进度条_很好看的java进度条
  12. ArcGIS的mxd文档存储为相对路径
  13. 记住键盘快捷键大全 提高电脑操作速度
  14. vscode修改代码颜色
  15. C语言”%p”的意思-----printf(%p,p)
  16. 协同办公“战役”,华为输了吗?
  17. java 批量爬取国图 marc信息,用txt和excel保存
  18. 网站推广软件-最新网站推广软件【推荐】
  19. 【例8-13】用字符指针操作字符串
  20. 32u图腾服务器机柜型号,图腾网络机柜-G36632-32U1.6米机柜

热门文章

  1. 单片机c语言跑马灯实验报告,单片机跑马灯实验报告
  2. linux 零拷贝golden,GoldenGate碎碎念
  3. 回顾 | Apache Flink 1.13 新版本 x 互娱实践分享 Meetup · 北京站精彩回顾 (附 PPT 下载)...
  4. 你可能不知道Flutter到底有多火
  5. 为什么每天工作那么努力,却无法突破职场瓶颈?
  6. python基础知识——函数(上)
  7. c#位数不够0补充完_人教版四年级上册数学第六单元《除数是两位数的除法》
  8. 乐安全 支持x86_android-x86-4.4-r2运行程序总是停止运行怎么处理
  9. php mysql pdo 多次_一次php脚本执行过程中多次实例化PDO的情景分析
  10. open函数_全!Python函数和文件操作合集(长文系列第三篇)