在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作。也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点。读者可以试试用SimpleAdapter添加一个按钮到ListView的条目中,会发现可以添加,但是却无法获得焦点,点击操作被ListView的Item所覆盖。这时候最方便的方法就是使用灵活的适配器BaseAdapter了。
一、使用BaseAdapter
BaseAdapter是Android应用程序中经常用到的基础数据适配器的基类,它实现了Adapter接口。其主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件进行显示。
由于BaseAdapter是一个抽象类,所以使用BaseAdapter时必须有一个类继承它,并实现它的方法。BaseAdapter的灵活性就在其要重写的很多方法,常会重写的几个方法如下。
-
int getCount():主要是获得列表项的数量。
-
Object getItem(int position):主要是获得当前列表项。
-
long getItemId(int position):主要是获得当前列表项的ID。
-
View getView(int position, View convertView, ViewGroup parent):主要是获得第position处的列表项组件。
二、示例
接下来通过一个示例程序来学习如何自定义BaseAdapter创建ListView。
继续使用WidgetSample工程,在app/main/res/layout/目录下创建custom_baseadapter_layout.xml文件,在其中填充如下代码片段:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
在res/layout/目录下新建一个custom_baseadapter_item.xml的列表项布局文件,其代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/icon_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:padding="5dp" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp" />
<TextView
android:id="@+id/info_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="10sp" />
</LinearLayout>
</LinearLayout>
考虑到每个列表项都可以是一个非常复杂的实体对象,用一个实体类更方便数据管理。创建一个类,代码如下:
package com.jinyu.cqkxzsxy.android.listviewsample.entity;
/**
* @创建者 鑫鱻
* @描述 Android零基础入门到精通系