课后习题
1. 简述ListView与RecyclerView的区别
ListView与RecyclerView的区别具体如下:
①展示效果:RecyclerView控件可以通过LayoutManager类实现横向或竖向的列表效果、瀑布流效果和GridView效果,而ListView控件只能实现竖直的列表效果。
②适配器:RecyclerView控件使用的是RecyclerView.Adapter适配器,该适配器将BaseAdapter中的getView()方法拆分为onCreateViewHolder()方法和onBindViewHolder()方法,强制使用ViewHolder类,使代码编写规范化,避免了初学者写的代码性能不佳。
注:
onCreateViewHolder方法主要用于加载Item界面的布局文件,并将MyViewHolder类的对象返回
onBindViewHolder方法主要是将获取的数据设置到对应的控件上
类似于ListView中ViewHolder类作用的MyViewHolder类用于获取Item界面上的控件
③复用效果:RecyclerView控件复用Item对象的工作由该控件自己实现,而ListView控件复用Item对象的工作需要开发者通过convertView的setTag()方法和getTag()方法进行操作。
④动画效果:RecyclerView控件可以通过setItemAnimator()方法为Item添加动画效果,而ListView控件不可以通过该方法为Item添加动画效果。
2. 简述实现Button按钮的点击事件的方式有哪几种?
实现Button按钮的点击事件一共有3种方式,具体如下:
①在布局文件中指定onClick属性的方式设置点击事件,Activity中定义实现点击事件的方法名必须与onClick属性的值保持一致。
②使用匿名内部类的方式设置点击事件。
③通过为Activity实现OnClickListener接口的方式设置点击事件。
前两种适用于Button控件较少的情况
后一种适用于Button控件较多的情况
3.1简单控件的使用
3.1.1TextView
Android中的空间样式除了可以使用XML属性设置外,也可以使用Java中的方法设置,空间的每一个XML属性都对应一个Java方法
3.1.2Button
继承自TextView控件,既可以显示文本,又可以显示图片,同时也允许用户通过点击来执行操作
为Button控件设置点击事件的方式:
①在布局文件中指定onClick属性的方式设置点击事件
在Activity中定义实现点击事件的方法名,必须与onClick属性的值保持一致
②使用匿名内部类的方式设置点击事件
③Activity实现OnClickListener接口的方式设置点击事件
3.1.3EditText
编辑框,是TextView的子类
3.1.4ImageView
继承自View,可以加载各种图片资源
andriod:background属性设置的是背景,会根据ImageView控件的大小进行伸缩,而android:src属性设置的是前景,以原图大小显示
3.1.5RadioButton
单选按钮,是Button的子类
每一个单选按钮都有选中和未选中两种状态,是通过android:checked属性指定的
在Android程序中RadioButton经常与RadioGroup配合使用,实现RadioButton的单选功能
RadioGroup继承自LinearLayout,可以使用android:orientation属性控制RadioButton的排列方向
3.1.5CheckBox
复选框,是Button的子类,用于实现多选功能
每一个复选框都有选中和未选中两种状态,是通过android:checked属性指定的
在MainActivity中实现CompoundButton.OnCheckedChangeListener接口,并重写onCheckedChanged()方法,在该方法中实现CheckBox控件的点击事件
3.1.7Toast
Toast是Android系统提供的轻量级信息题型机制,用于向用户提示即时消息,它显示在应用程序界面的最上层,显示一段时间后自动消失不会打断当前操作
Toast.makeText(Context,Text,Time).show();
Context:当前组件的上下文环境,Context是一个抽象类,如果在Activity中使用Toast提示信息,那么该参数可设置为“当前Activity.this”
Text:字符串信息
Time:显示信息的时长,其属性值包括Toast.LENGTH_SHORT和Toast.LENGTH_LONG
3.3ListView的使用
3.3.1ListView控件的简单使用
以列表形式展示数据内容,并且能够根据列表的高度自适应屏幕显示
3.3.2常用数据适配器(Adapter)
在为ListView控件添加数据时会用到数据适配器,数据适配器是数据与视图之间的桥梁,它类似于一个转换器,将复杂的数据转化成用户可以接收的方式进行呈现
1.BaseAdapter
基本适配器,实际上是一个抽象类,通常在自定义适配器时会继承BaseAdapter,该类拥有四个抽象方法
注:getView方法中,convertView代表的是滑出屏幕的Item对象(以缓存形式存在),可以通过复用convertView对象从而减少Item对象的创建
2.SimpleAdapter
继承自BaseAdapter,实现了BaseAdapter的四个抽象方法并对其进行封装
SimpleAdapter的构造方法的具体信息:
3.ArrayAdapter
是BaseAdapter的子类,用法与SimpleAdapter类似
常用于适配TextView控件
ArrayAdapter有多个构造方法
使用实例:
优化ListView加载数据逻辑
当ListView控件上加载的Item过多并快速滑动该控件时,界面会出现卡顿的现象:
①当滑动时,不断地创建Item对象,ListView控件在当前屏幕上显示多少个Item,就会在适配器中的getView方法中创建多少个Item对象,当滑动ListView控件时,滑出屏幕的Item对象会被销毁,新加载到屏幕上的Item会创建新的对象,因此快速滑动ListView控件时会不断地对Item对象进行销毁和创建
②每创建一个Item对象都需要加载一次Item布局,加载布局时会不断地执行findViewById,这些操作比较耗费设备的内存并且浪费时间
优化的目的是使ListView控件在快速滑动时不再重复创建Item对象,减少内存的消耗和屏幕渲染的处理
这个优化的过程也是ListView与RecyclerView不同的地方
3.4RecyclerView的使用
RecyclerView的功能更加强大:
onCreateViewHolder方法主要用于加载Item界面的布局文件,并将MyViewHolder类的对象返回
onBindViewHolder方法主要是将获取的数据设置到对应的控件上
MyViewHolder类用于获取Item界面上的控件
RecyclerView空间与ListView控件展示的列表效果相同,但是每个Item之间默认没有分割线,开发者可以通过RecyclerView控件的addItemDecoration()方法对列表的分割线进行设置