Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现),relativelayout
Android开发3:Intent、Bundle的使用和ListView的应用 、RelativeLayout(相对布局)简述(简单通讯录的实现),relativelayout
前言
啦啦啦~博主又来骚扰大家啦~大家是不是感觉上次的Android开发博文有点长呢~主要是因为博主也是小白,在做实验的过程中查询了很多很多概念,努力去理解每一个知识点,才完成了最终的实验。还有就是随着我们的实验的进行,代码量也会越来越多,所以在接下来的博文中会对源码进行取舍,而不会把全部的实验代码都放到博文中~
大家在看博文时如果有什么意见或者感觉博主有说错、说的不清楚的地方可以在评论中留言,博主会第一时间回复大家~我们一起学习,共同进步~
好啦~进入正题~
本次Android开发,我们主要探讨一下Intent、Bundle的使用和ListVie的应用——即在实验中我们将复习事件处理、学习 Intent、Bundle 在Activity 跳转中的应用,并学习 ListView 以及各类适配器的用法,在其中我们也会简单讲述一下RelativeLayout(相对布局)的使用。
基础知识
1、ListView 的使用
布局上比较简单,在布局文件中写上
即可,这样就创建了一个空的列表,然后在.java 文件中再填充数据,所以 id 是一定要设 的。
在.java 文件中获得这个 ListView 之后,使用 Adapter 为这个 ListView 填充数据,常用 的 Adapter 有 ArrayAdapter、SimpleAdapter,这两种在下面会详细讲述如何使用。随着 ListView 中内容的丰富,以上两种 Adapter 已经很难满足需要,因此现在一般使用自定义 的 Adapter 来填充数据,如何使用自定义的 Adapter 会在拓展知识中讲。(Adapter的作用:数据在adapter中做了处理之后,显示在视图上)
ArrayAdapter
最简单的 Adapter,创建 ArrayAdapter 时需指定如下三个参数:
Context:这个参数无须多说,它代表了访问整个 Android 应用的接口。几乎创建所有组件 都需要传入 Context 对象。
textViewResourceId:一个资源 ID,该资源 ID 代表一个 TextView,该 TextView 组件将作 为 ArrayAdapter 的列表项组件。
数组或 List:该数组或 List 将负责为多个列表项提供数据。
示例:
在创建完 ArrayAdapter 之后,调用 ListView 的 setAdapter 方法即可将数据填充到 ListView 中。
这里有一点要特别注意的是 textViewResourceId 是一个 layout,在这个 layout 中只能有 一个 TextView,其它任何组件都不能有,包括 LinearLayout 等布局组件,否则会报错。
SimpleAdapter
一般的对于ArrayAdapter来说,只需要把一个数组和一个样式传递给ArrayAdapter之后就可以在视图上用一个列表显示出这个字符串数组。
但是,比如我们手机的联系人目录所示,不仅仅是有列表,而且有头像,可能还有手机号码。所以,单纯的ArrayAdapter是不能够实现这种复杂的视图的。
我们可以用SimpleAdapter来实现这种复杂的视图,不过需要设计样式。
由于 ArrayAdapter 只能显示文字,功能实在有限,如果需要多填充一些内容的话指望不 上,这时候可以使用 SimpleAdapter。
SimpleAdapter 相比 ArrayAdapter 强大很多,创建 SimpleAdapter 需要 5 个参数,第一个 参数依然是 Context,就不多说了,下面介绍余下的 4 个参数:
第 2 个参数:该参数应该是一个 List<? Extends Map<String, ?>>类型的集合对象,该集 合中每个 Map<String, ?>对象生成一个列表项。
第 3 个参数:该参数指定一个界面布局的 ID。该界面布局指定每一个列表项的样式。
第 4 个参数:该参数应该是一个 String[]类型的参数,该参数决定提取 Map<String, ?>对 象中哪些 key 对应的 value 来生成列表项。
第 5 个参数:该参数应该是一个 int[]类型的参数,该参数决定填充哪些组件。
示例:
首先构建好数据,这里模拟了一个图书清单,一个 map 中有两个 key,存放书名和价格, 然后添加到 list 中。
然后创建 SimpleAdapter:
之后还是用 ListView 的 setAdapter 方法添加 Adapter。
看一下 R.layout.item 文件:
可以看到,一个 LinearLayout 包含两个 TextView,一个用于显示书名,一个用于显示价 格,这个 layout 用于规定 ListView 中每一个列表项的样式。SimpleAdapter 中的第四个 参数 String 数组与 map 的两个 key 对应,第五个参数 int 数组与这个 layout 中两个 TextView 的 id 相对应,注意 String[]数组与 int[]数组中的值要一一对应,在这个示例 中,key 为 name 的 value 填充到 id 为 name 的 TextView 中。效果如下图所示:
2、ListView 列表项的单击和长按
方法原型如下:
长按有返回值,在理论课的课件中写的很清楚了,这里就不解释了。注意在两个方法的参 数中都有 int i, long l 这两个参数,i 指的是这一项在列表中的位置,l 指的是这一项的 id,在 ArrayAdapter 和 SimpleAdapter 中,i 和 l 是相等的,在另一种 Adapter—— CursorAdapter 中,l 指的是从数据库中取出的数据在数据库中的 id 值。
3、ListView 数据更新
直观地想,要实现数据更新,只要更新 List,重新创建一个 SimpleAdapter 就可以了,这 样会比较麻烦,SimpleAdapter 有一个 notifyDataSetChanged()方法,当之前创建该 SimpleAdapter 的 List 发生改变时,调用该方法就可以刷新列表了。要特别注意的一点 是,List 不能指向新的内存地址,即不能 list = new ArrayList<>();这样是不起作用 的,只能调用它的 remove(),add()等方法来改变数据集。
示例:
错误写法:
4、去掉标题栏
正常的我们平时使用的Android应用都是不包含我们在使用AS调试时出现的标题栏的,那么,这个烦人的标题栏如何去掉呢~
要去掉标题栏有多种做法,这里举一种方法。 Android Studio 创建项目时默认的 theme 是:
它的定义是:
修改 parent 即可:
5、星星图标的切换
星星的切换难点在于如何得知星星此时是空心的还是实心的,这个也有多种做法,这里也 只介绍一种。
每个 View 都可以设置 tag,通过 tag 可以用来判断该 View 现在的状态。在初始化的时 候,将 tag 设置为 0,标记此时为空心星星,如果星星被点击了,并且 tag 为 0,那么就把 图片换为实心的星星,然后设置 tag 为 1;如果 tag 为 1,那么就把图片换为空心的星星, 然后设置 tag 为 0。建议在 java 文件中给需要的 view 设置 tag。
6、RelativeLayout(相对布局)简述(在以后将会推出Android开发重点难点篇详述相对布局,尽请关注~)
RelativeLayout(相对布局)是除线性布局之外最常用的,它相对于线性布局来说比较灵活,在进行组件布局的时候用线性布局往往需要进行布局嵌套,而相对布局就不会那么麻烦,每个组件都可以指定与其它组件或父组件的位置,只是必须通过ID来进行指定。
RelativeLayout按照各子元素