Android学习笔记——列表和适配器


一、ArrayAdapter适配器

适配器的角色就是将批量化的数据按预定义的格式,显示到组件上
在众多的适配器中,最简单的是ArrayAdapter,它接受字符串的列表(List)或者数组,并使用Android内置的一些样式
ArratAdapter常用的构造方法有两种

(1).public ArrayAdapter(Context context,@LayoutRes int resource, T[] objects)
(2).public ArrayAdapter(Context context,@LayoutRes int resource, List objects)

context是上下文:一般指使用该适配器的Activity对象,在MainActivity指MainActivity.this(在非匿名函数里可直接用this)
resource是样式控制参数:常用的样式有android.R.layout.simple_list_item_1, siimple_list_item_single_choice,不同的样式具有不同的视图格式
objects可以是任何类型,一般是你要传入的数据
创建适配器对象
ArrayAdapter<T> adapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,T类型的数据)
当适配器通过构造方法创建后(本质上,构造方法接受了适配器的样式和数据,并返回一个适配器对象实体),就可以提供给Spinner,ListView,GridView等组件,组件对象通过setAdapter()方法,将适配器作为方法的参数,使得视图组件拥有适配器,进而实现批量化的数据显示

二、下拉列表(Spinner)

常用于数据选择,且可以使界面变得简洁
Spinner设置完适配后,需要设置对应的选中侦听事件,对用户的选择进行响应处理
在这里插入图片描述
下拉列表的内容依赖于适配器
所以获取到Spinner对象后,要通过setAdapter()方法设置适配器

三、XML文件的引用

在Android编程中,一般将值和界面定义在XML中,方便后期的管理。
在项目res/values文件夹下的XML文件中,可用color标签定义颜色,string标签定义字符串,dimen定义尺寸,drawable定义绘图资源及图片,integer定义整型数据。
标签的name属性给出资源的名称,
除了单个数据的定义,XML还可以定义数组,

  • string-array定义字符串数组
  • integer-array定义整型数组
  • array定义通用数组

数组除了name属性,还有<item>子节点
数组在代码中的引用方式是R.array.name其中name是数组的name属性值
XML文件之间的引用(@xxx/yyy,xxx为数据类型,yyy为name值)

Java代码中的引用(R.xxx.yyy,xxx为数据类型,yyy为name值)
在JAVA程序中获取XML资源还要利用Activity对象提供的getResource()方法获得Resource对象,使用Resource对象对XML资源取数,

  • string-array,用getStringArray()方法
  • integer-array,用getIntArray()方法
  • 通用型array,用obtainTypeArray()方法获取(数据类型为TypedArray),再通过TypeArray对象的getColor()、getDimension()、getDrawable()等方法分别进行颜色、尺寸或绘图对象的二次解析

getColor()这几个方法用的的时候一般都会有两个参数,

  • 一是在TypeArray中的位置,
  • 二是获取数据失败时替换的默认参数(这个要和你想获取的数据类型匹配,颜色啊,尺寸啊什么的)

以颜色为例子

int color = myColors.getColor(position, Color.BLACK);
//myColors是TypeArray对象

四、列表视图(listview)

列表视图ListView是一行行显示相同格式内容的一种组件,常用于新闻,商品等数据展示,其使用方法与Spinner类似,也是通过适配器与数据挂钩,区别的是,ListView使用OnItemClickListener接口侦听列表项的点击事件

顺便讲讲图片的插入
图片的命名:纯小写字母,或者加上_和数字的组合,首字母必须是小写字母
图片文件放置在res/drawable文件夹
如果虚拟机是Android5.0(API21),不能选择drawable-v24文件夹,否则会出现找不到图片资源导致的程序崩溃

图片的引用
XML中的引用方式为@drawable/xxx,xxx为图片的文件名称,不用加jpg等后缀的文件扩展名
适配器可以通过静态方法createFromResource() 直接从XML资源数组R.array.image_names创建

尽管图片资源在XML中定义的是integer-array数组,但直接取出的int值通过ImaView对象的setImageResource()方法设置不能成功的设置图片,因此依然采用obtainTypedArray()方法获得通用型数组,再调用数组的getDrawable()方法二次解析成Drawable对象,并通过ImageView对象的setImageDrawable()方法设置图片资源

Java代码中的引用方式为R.drawable.xxx(xxx为文件名字),在Java中,图片资源引用的本质是int型数据 ,多张图片可以用int[]数组进行管理,也可以在XML中定义通用数组array,将图片以引用的方式作为array中一个item的值,再在Java中引入array加以利用
举个例子
在这里插入图片描述
结合ListView,如下
在这里插入图片描述

五、网格视图(GridView)

和ListView类似需要适配器,同时也有响应的点击事件
在XML布局中,需要设置更多的属性
(1).android:numColumns控制列数
’属性值可以是直接的数字,也可以使auto_fit由系统自动计算列数
(2).android:colunmWidth控制列宽
如果android:numColumns有属性值,列宽就不需要
(3).android:gravity用于控制单元格内对齐方式
(4).android:horizontalSpacing和android:verticalSpacing分别控制单元格之间的水平间距和垂直间距
(5).android:stretchMode控制分配完列空间后,对剩余空间的处理方式
属性值为none,剩余空间不扩展
属性值为spcingWidth,则将剩余空间平均分配到列间距上,首尾不分配
属性值为spcingWidthUniform,则首尾也分配
属性值为cloumnWidth,则将剩余空间平均分配到列宽上

六、自定义适配器

首先实现自定义数据封装类,把需要使用的数据写到一个类封装起来

比方说我们我们要在listView的一个item中显示一个城市的图片和名字,那这一个类我们就需要图片(图片资源引用的本质是int型数据)和城市名两个成员变量,一个int,一个String,类名city

然后改写ArrayAdapter,使之能根据自定义布局生成行视图
核心步骤:

  • (1)通过构造方法传递必要的参数,使得适配器能够得到所需操作的对象,例如上下文Context数据源,以及更多的参数
    在这里插入图片描述

  • (2)改写getView()方法,在该方法中,LayoutInflaterinflate() 方法,它的作用是把 xml 布局转换为对应的 View 对象,并利用传递进来的位置索引参数position取得数据源对应位置的单元数据将其渲染到行视图上,同时也可以设置一些点击事件

在这里插入图片描述
在这里插入图片描述
这一块我就简单写一下(我懒),重点还是得结合例子自己操作


总结

最近在学android,根据老师的资料整理的,只记录了部分我认为比较关键的一些理论知识,想要更好的掌握还是得动手敲一敲,部分内容自己预习的,描述的不是很好,后期会更正

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值