天天看點

擴充卡 BaseAdapter 類

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>