BaseAdapter 类
(一)概述
AdapterView 通过Adapter (适配器类)向 AdapterView 的子类视图填充数据,其中,BaseAdapter 是所有适配器类的基类。该类是抽象类
(二)常用方法
1、public View getView(int position,View convertView,ViewGroup
parent)
作用:创建并返回列表项,包括列表项的显示样式和数据,
Android 根据 getView 返回的对象绘制列表项。
说明:
第一个参数-position:当前列表项在列表中的索引值
第二个参数-convertView:当前列表项的 View 对象
第三个参数-parent:列表项的父容器对象一列表对象
提示:该方法是抽象方法。
示例:以下代码创建一个标签对象,并返回该对象作为列表项
@Override
public View getView(int position,View convertView,ViewGroup
parent){
//实例化标签对象
TextView tvCityName = (TextView) findViewById
(R.layout.listview_item);
//设置标签的标题为数组中索引值为position(即当前列表项的
索引值)的元素
tvCityName.setText(mCityName[position]);
return tvCityName; //返回标签对象
}
2、public long getItemId(int position)
作用:返回当前列表项的索引值
参数-position:当前列表项的索引值
提示:该方法为抽象方法
示例代码:
@Override
public long getItemId(int position){
return postion;
}
3、public Object getItem(int position)
作用:返回当前列表项对象
参数-position:当前列表项的索引值
提示:该方法是抽象方法
示例代码:
@Override
public String getItem(int position){
return mCityName[position];
}
说明:
1、mCityName 是一个字符串数组。以上代码返回该数组中的一个
元素。
2、默认 getItem 返回的是 Object 类型,实际编程中应该修改
为具体要返回的类型。
例如:本例中返回的是 String 类型。若不修改,则调用该方法时需要做
类型转换。
4、public int getCount()
作用:返回该列表的对象总数,Android 系统根据 getCount()返
回的值绘制指定数量的列表项。
提示:该方法是抽象方法。
具体实例:
package com.jxust.day_05_01_listviewdemo;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
ListView mlvGeneral;
List<GeneralBean> mGenerals; // 代表十个军事家的集合
GeneralAdapter mAdapter;
int[] resid = { R.drawable.baiqi, R.drawable.caocao, R.drawable.chengjisihan, R.drawable.hanxin, R.drawable.lishimin, R.drawable.nuerhachi,
R.drawable.sunbin, R.drawable.sunwu, R.drawable.yuefei, R.drawable.zhuyuanzhang };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData(); // 初始化数据
initView();
}
private void initView() {
mlvGeneral = (ListView) findViewById(R.id.lvGeneral);
mAdapter = new GeneralAdapter(); //创建适配器
// 和ListView 关联起来
mlvGeneral.setAdapter(mAdapter);
}
private void initData() {
// 将资源中的字符串数组转换为Java数组
String[] names = getResources().getStringArray(R.array.generals);
mGenerals = new ArrayList<GeneralBean>();
for (int i = 0; i < names.length; i++) {
GeneralBean bean = new GeneralBean(resid[i], names[i]);
mGenerals.add(bean);
}
}
// 定义代表军事家的适配器类
class GeneralAdapter extends BaseAdapter {
@Override
public int getCount() {
return mGenerals.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// 拿到 ListView 的布局并且转换为 View 类型的对象
View layout = View.inflate(MainActivity.this, R.layout.item_generals, null); // root表示的是父容器
// 找到显示军事家头像的 ImageView
// layout的作用就是将目标转换为 layout.item_generals
ImageView ivThumb = (ImageView) layout.findViewById(R.id.ivThumb);
// 找到显示军事家名字的 TextView
TextView tvName = (TextView) layout.findViewById(R.id.tvName);
// 获取军事家中下标是 position 的军事家对象
GeneralBean bean = mGenerals.get(position);
// 显示军事家头像
ivThumb.setImageResource(bean.getResid());
// 显示军事家的姓名
tvName.setText(bean.getName());
return layout;
}
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lvGeneral"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#ccc"
android:dividerHeight="2dp"
android:entries="@array/generals" />
</RelativeLayout>
<?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="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ivThumb"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/baiqi"
/>
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="80dp"
android:layout_marginLeft="10dp"
android:text="白起"
android:textSize="20sp"
android:gravity="center_vertical"
/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Day_05_01_ListViewDemo</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string-array name="generals">
<item >白起</item>
<item >曹操</item>
<item >成吉思汗</item>
<item >韩信</item>
<item >李世民</item>
<item >努尔哈赤</item>
<item >孙膑</item>
<item >孙武</item>
<item >岳飞</item>
<item >朱元璋</item>
</string-array>
</resources>