这次我们来介绍一下ListView控件以及常用数据适配器Adapter的使用,并通过一个商品展示案例来说明。
一.ListView控件
在Android开发中ListView是一个比较常用的控件。它以列表的形式展示具体数据内容,并且能够根据数据的长度自适应屏幕显示。接下来介绍一下ListView的常见属性。
ListView常见属性:
1.android:cacheColorHint——设置拖动的背景色
2.android:divider——设置分隔线
3.android:dividerHeight——设置分隔线的高度
4.android:listSelector——设置ListView item选中时的颜色
5.android:scrollbars——设置ListView的滚动条
6.android:dadeScrollbars——设置为true就可以实现滚动条的自动隐藏和显示
ListView是一个列表视图,由很多Item(条目)组成,每个Item的布局都是一样的。需要注意的是,在布局文件中需要指定ListView的id。同时,如果不对ListView进行数据适配,那么就无法在界面上看到布局文件中创建的ListView。
二.Adapter
上面提到在使用ListView时需要对其进行数据适配。为了实现这个功能,Android系统提供一系列的适配器(Adapter)对ListView进行数据适配。可以将适配器理解为界面数据绑定。接下来介绍几种常用的Adapter。
1.BaseAdapter
BaseApdater顾名思义即基本的适配器。它实际上就是一个抽象类。在Android开发中,就是根据这几个抽象方法来对ListView进行数据适配的。BaseAdapter的四个抽象方法的功能如下所示:
public int getCount()--------得到Item的总数
public Object getItem(int position)--------根据position得到某个Item的对象
public long getItemId(int position)--------根据position得到某个Item的id
public View getView(int position,View convertView,ViewGroup parent)--------得到相应的Item视图,position当前Item的位置,convertView复用的View对象
这四个抽象方法分别用于设置Item的总数、获取Item对象、获取Item id、得到Item视图。开发者在适配数据到ListView时,需要创建一个类集成BaseAdapter并重写这四个抽象方法。
2.SimpleAdapter
SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法。分别是getCount()、getItem()、getItemId()、getView()方法。因此,开发者只需要在创建SimpleAdapter实例时,在构造方法里传入相应的参数即可。SimpleAdapter的构造方法如下:
public SimpleAdapter(Context context,List<? extends Map<String,?>>data,int resource,String[] from,int[] to);
上述构造方法中有多个参数:
a. Context context:Context对象,getView()方法中更需要用到Context将布局转换成View对象。
b. int resource:Item布局的资源id。
c. String[] from:Map集合里面的key。
d.int[] to:Item布局对应的控件id。
需要注意的是,SimpleAdapter只能适配Checkable、TextView、ImageView,其中Checkable是一个接口,CheckBox控件就实现了该接口。TextView适用于显示文本的控件,ImageView是用来显示图片的控件。int[] to所代表的控件不是这三中类型则会报IllegalStateException。
3.ArrayAdapter
ArrayAdapter也是BaseAdapter的子类,与SimpleAdapter相同,ArrayAdapter也不是抽象类,并且用法与SimpleAdapter类似,开发者只需要在构造方法里传入相应参数即可适配数据。ArrayAdapter通常用于适配TextView控件,例如Android系统中的Setting(设置菜单)。
ArrayAdapter的构造方法如下:
public ArrayAdapter(Context context,int resourse,inttextViewResourceId,T[]objects);
上述构造方法同样有多个参数:
a. Context context:Context对象。
b. int resource:Item布局的资源id。
c. int textViewResourceId:Item布局相应的控件TextView的id。
d. T[] objects:需要适配的数据数组。
OK,接下来我们通过一个案例来了解ListView控件以及Adapter的使用。
下面为详细步骤及代码:
1.新建一个程序,设计用户交互界面。
代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="8dp"
tools:context="com.example.productshow.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/addLL"
android:orientation="horizontal">
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/nameET"
android:hint="商品名称"
android:inputType="textPersonName"/>
<EditText
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:id="@+id/balanceET"
android:hint="金额"
android:inputType="number"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/addIV"
android:onClick="add"
android:src="@android:drawable/ic_input_add"
/>
</LinearLayout