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>