当前课程知识点:Android应用开发基础 >  第三章 Android组件 >  3.4 Android适配器 >  3.4.2 自定义适配器

返回《Android应用开发基础》慕课在线视频课程列表

3.4.2 自定义适配器在线视频

下一节:3.4.1实践案例-系统适配器

返回《Android应用开发基础》慕课在线视频列表

3.4.2 自定义适配器课程教案、知识点、字幕

今天我们介绍自定义适配器

一般使用BaseAdapter作为父类

实现自定义的适配器

自定义适配器主要需要实现下面四个接口

1 public int getCount()方法

获取适配器中数据个数

2 public Object getItem(int position)

获取数据索引对应的数据项

3 public Object getItem(int position)

获取数据索引id

4 public View getView(int

这是最重要的几个借口

需要获取每一行Item的显示内容

对ListView列表组件来说

可以使用自定义BaseAdapter

适配器来进行数据的显示

自定义BaseAdapter的原理图如下所示

1 ListView组件

向BaseAdapter发送获取子项目视图请求

2 BaseAdapter组件

动态加载子项列表布局文件

并生成子视图View

3 BaseAdapter组件访问数据列表

并根据列表子项位置读取对应的数据

4 根据读取的数据

将子视图View的各个组件进行更新

5 将子视图View返回给ListView组件

ListView显示每一个子项

ListView的代码实现如下图所示

1 新建一个ItemBean类实现数据的聚合

(1)定义图片id数据int iPic

图片名称字符变量String strName

图片说明字符变量String strContent

图片是否被选中布尔变量bChecked

(2)定义变量的Get和Set方法

2 自定义MyBaseAdapter类

来继承BaseAdapter

实现接口方法

(1)定义上下文Context mCtx变量

定义ArrayListmArrayList列表变量

(2)以新定义的变量为参数

定义MyBaseAdapter构造函数

(3)实现getCount接口

返回mArrayList.size()方法

(4)实现getItem接口

返回mArrayList.get(i)

(5)实现getItemId接口返回位置参数i

(6)实现getView接口

主要分为如下的部分

①将布局文件转化为View对象

②定义并初始化item布局文件中对应控件

③获取子项位置的ItemBean数据对象

④设置控件的对应属性值

3 数据进行初始化

(1)定义图片id数组int[] iPic

图片名称字符数组String[] strName

图片说明字符数组String[] strContent

(2)定义多列数据列表对象

ArrayListmArrayList

(3)将上述定义显示的数据

一一对应添加到多列数据列表对象

(4) 适配器初始化

①定义MyBaseAdapter适配器对象

并初始化

第一个参数使用当前Activity类this

第二个使用数据列表对象mArrayList

②将MyBaseAdapter适配器对象

设置为ListView对象的适配器

4 在Activitity主视图中

重写父类AdapterView的ononItemClick方法

实现下拉框子项单击事件处理

(1) onItemClick方法有两个参数

第一个参数adapterView表示ListView组件对象

第二个参数列表组件的子项

第三个参数代表第几个子项被选中

(2) 我们使用Toast

将被选中的子项的信息进行显示

(3)使用mArrayList.get(i).getbChecked()

获取子项的单选框状态

如果被选中就提示CheckBox被选中

这就是ListView

使用自定义Adapter的全部过程

下面我们介绍自定义Adapter的优化

自定义Adapter在实现

BaseAdapter的getView方法的时候

主要存在下面的耗资源的操作

1 ListView的子视图

由布局文件转化为View对象

占用内存

IO操作影响性能

2 子视图的组件

每次需要通过findViewById查找

非常耗时

ListView的Adapter的优化思路如下

1 假设屏幕每次只能显示8个子项

Item1到Item8

2 用户滑动屏幕的过程中

Item1消失

增加Item9

3 将Item1的视图对象

通过getView参数convertView

传递给Item9

ListView不管有多少子项

只需要准备8个Item对象内存

4 生成ViewHolder对象

包括子布局的各个组件对象

5 Item子布局生成并且初始化的过程中

将子布局的各个组件对象

保存到ViewHolder对象中

并将ViewHolder对象存储到

Item的View视图的Tag对象中

6 每次设置控件的对应属性值的时候

不需要通过findViewById查找子布局的控件

节省了耗时操作

ViewHolder的实现如下图

(1) 在getView方法中选中子布局后

点击LayoutCreate方法

可以自动生成ViewHolder代码

(2) ViewHolder自动定义了属性变量

其中View rootView代表子布局视图

ImageView mImage1代表图片组件

TextView mText1代表图片名称

TextView mText2代表图片说明

CheckBox mCheckBox代表单选框

(3) ViewHolder构造函数

在初始化的过程中

将子布局的组件对象初始化

自定义Adapter优化实现getView接口

主要的步骤如下

(1)定义子视图View对象mView

和子视图组件对象mViewHolder

(2) 判断系统是否已提供子布局视图view

如果提供

直接将系统提供的子布局视图view

赋值给mView

使用view.getTag方法

将所有组件对象的值赋值给mViewHolder

(3)如果系统不提供子布局视图

使用系统动态加载器

将布局文件转换为View对象

并赋值给mView

使用mView为参数生成VIewHolder对象

将值赋值给mViewHolder

使用mView.setTag方法

将mViewHolder对象保存到mView视图中

(4)根据getView传递的参数子项位置i

使用mArrayList.get(i)

获取对应子项的数据

使用mViewHolder对象

将子项的数据分别赋值给对应的组件对象

(5)将子项视图mView传递回ListView

好 这就是使用ViewHolder

实现自定义适配器优化的全部过程

Android应用开发基础课程列表:

课程教案

-1 Android应用开发基础-课程标准

-2 Android应用开发基础-教案

第一章 Android概述

-讨论:Android应用开发基础资源下载地址

-讨论的问题:华为“鸿蒙系统”会取代安卓吗?

-Android Studio4.1.2安装常用问题汇总2021.3.15

-1.1 Android概述

--1.1 Android概述

--1.1 Android Studio安装与配置-实践案例

-1.1 Android概述--作业

-1.2 Android程序

--1.2 Android程序

--1.2 第一个Android应用程序-实践案例

-1.2 Android程序--作业

-1.3 Android程序调试

--1.3 Android程序调试

--1.3 Android程序调试-实践案例

-1.3 Android程序调试--作业

-讨论-完成第一个Android程序需要多长时间?

第二章 Android视图

-讨论-什么是Activity?

-2.1 Activity概述

--2.1 Activity概述

--2.1.1 实践案例-Activity生命周期

--2.1.2 实践案例-Activity跳转和数据传递

-2.1 Activity概述--作业

-2.2 Activity应用

--2.2 Activity应用

--2.2 实践案例-Activity四种启动模式

-第2章 Android视图--2.2 Activity应用

-讨论-怎么理解常用的四种启动模式?

第三章 Android组件

-讨论:Android在五个常用布局外还有哪几种布局方式?

-3.1 Activity布局

--3.1 Activity布局

--3.1 实践案例-Android布局

-3.1 Activity布局--作业

-3.2 Android基础组件

--3.2 Android基础组件

--3.2.1 实践案例-文本和按钮组件

--3.2.2 实践案例-编辑框和进度条组件

-3.2 Android基础组件--作业

-3.3 Android中级组件

--3.3 Android中级组件

--3.3.1 实践案例-复选框和开关组件

--3.3.2 实践案例-单选框和图像组件

-3.3 Android中级组件--作业

-3.4 Android适配器

--3.4.1 系统适配器

--3.4.2 自定义适配器

--3.4.1实践案例-系统适配器

--3.4.2 实践案例-自定义适配器

-3.4 Android适配器--作业

-讨论-如何解决Android的布局嵌套问题的?

第四章 Android Fragment

-讨论:Fragment的优点?

-4.1 Fragment碎片组件

--4.1.1 Fragment静态加载

--4.1.2 Fragment与Activity通讯

--4.1.3 Fragment动态加载

--4.1.1 实践案例-Fragment静态加载

--4.1.2 实践案例-Fragment的动态加载

-4.1 Fragment碎片组件--作业

-4.2 ViewPager翻页类组件

--4.2.1 ViewPager翻页类组件

--4.2.2 引导页和标题栏

--4.2 实践案例-引导页和选项卡

-4.2 ViewPager翻页类组件--作业

-讨论:fragment与activity的生命周期有哪些不同?

第五章 广播

-讨论:Android广播有什么作用?

-5.1 Android广播概述

--5.1 Android广播概述

--5.1.1 实践案例-手机电量显示

--5.1.2 实践案例-手机充电状态显示

-5.1 Android广播概述--作业

-5.2 Android广播工作原理

--5.2 Android广播工作原理

--5.2.1 实践案例-手机网络状态显示

--5.2.2 实践案例-短消息接收

-5.2 Android广播工作原理--作业

-5.3 自定义广播

--5.3 自定义广播

--5.3 实践案例-自定义广播与有序广播

-第5章 广播--5.3 自定义广播

-5.4 有序广播

--5.4有序广播

--5.4.2 实践案例-登录广播-记住密码

--5.4.2 实践案例-登录广播-强制退出

-第5章 广播--5.4 有序广播

-讨论:广播的动态注册和静态注册有什么区别?

第六章 Android服务

-讨论:Android的服务有什么作用?

-6.1 系统服务概述

--6.1 系统服务概述

-6.1 系统服务概述--作业

-6.2 访问系统服务

--6.2 访问系统服务

--6.2 实践案例-通知服务

-6.2 访问系统服务--作业

-6.3 自定义服务

--6.3 自定义服务

--6.3.1 实践案例-启动服务

--6.3.2 实践案例-绑定服务

--6.3.3 实践案例-后台服务

-第6章 Android服务--6.3 自定义服务

-6.4 多线程

--6.4 多线程

--6.4.2 实践案例-MyService下载

--6.4.3 实践案例-MyIntentService

--6.4.4 实践案例-AsyncTask实现对话框下载

--6.4.5 实践案例-下载精灵

-第6章 Android服务--6.4 多线程

-讨论:Android中怎么启动Service?

第七章 内容提供者ContentProvider

-讨论:ContentProvide的作用是什么?

-7.1 Android运行权限

--7.1 Android运行权限

--7.1 实践案例-拨打电话与发送短信

-7.1 Android运行权限--作业

-7.2 URL URI概述

--7.2 URL URI概述

-第7章 内容提供者ContentProvider--7.2 URL URI概述

-7.3 ContentProvider概述

--7.3 ContentProvider概述

--7.3 实践案例-读取联系人

-第7章 内容提供者ContentProvider--7.3 ContentProvider概述

-7.4 访问通讯录

--7.4 访问通讯录

--7.4.1 实践案例-读取通讯录

--7.4.2 实践案例-添加通讯录

--7.4.3 实践案例-删除更改通讯录

-第7章 内容提供者ContentProvider--7.4 访问通讯录

-7.5 课后作业案例

--7.5.1 实践案例-文件管理器-查看

--7.5.2 实践案例-文件管理器-播放

-讨论:ContentProvide如何使用?

第八章 多媒体

-讨论:Android多媒体主要应用于哪些场景?

-8.1 相机服务

--8.1 相机服务

--8.1.1实践案例-拍照服务

--8.1.2 实践案例-相册服务

-8.1 相机服务--作业

-8.2 音视频服务

--8.2 音视频服务

--8.2.1实践案例-音乐播放

--8.2.2 实践案例-视频播放

-8.2 音视频服务--作业

-讨论:Android视频组件的使用流程?

第九章 网络技术

-讨论:为什么使用Json作为网络的通讯格式?

-9.1 网络服务概述

--9.1 网络服务概述

--9.1 实践案例-WebView和Http服务

-9.1 网络服务概述--作业

-9.2 网络框架

--9.2 网络框架

--9.2 实践案例-okhttp框架

-9.2 网络框架--作业

-9.3 Json

--9.3 Json

--9.3 实践案例-json协议

-第9章 网络技术--9.3 Json

-9.4 Volley

--9.4 volley

--9.4 实践案例-volley框架

-第9章 网络技术--9.4 Volley

-讨论:OkHttp和Volley的有什么区别?

第十章 数据存储

-讨论:Android的存储方式有哪几种?

-10.1 文件存储

--10.1 文件存储

--10.1.1 实践案例-文件读写布局

--10.1.2 实践案例-文件读写

--10.1.3 实践案例-SharedPreference文件读写

-10.1 文件存储--作业

-10.2 数据库存储

--10.2 数据库存储

--10.2.1 实践案例-Sqlite数据库操作布局

--10.2.2 实践案例-Sqlite数据库操作

-10.2 数据库存储--作业

-讨论:SQLite的基础操作的流程是什么?

课程实训(不计入考核)

-第1章 实训简介以及开发环境配置

--实训项目简介PPT以及实训指导书

--1.1 实训项目简介

--1.2 项目开发环境配置

-第2章 在线音乐播放器整体设计以及服务端开发

--在线音乐播放器整体介绍PPT以及服务端开发实训指导书

--2.1 在线音乐播放器-整体设计

--2.2 在线音乐播放器-服务端开发

-第3章 在线音乐播放器-客户端开发

--3.1 客服端开发实训指导书以及PPT

--3.2 客户端开发-讲课视频

-第4章 在线音乐播放器-完整版

--4.1 实训指导书以及PPT

--4.2 在线音乐播放器-完整版授课视频

-第5章 QQ聊天项目

--5.1 实训指导书以及PPT

--5.2 QQ聊天项目授课视频

-第6章 在线点餐系统

--6.1 实训指导书以及PPT

--6.2 在线点餐系统授课视频

3.4.2 自定义适配器笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。