1. 程式人生 > >13.Android中萬能的BaseAdapter的使用

13.Android中萬能的BaseAdapter的使用

大家好,今天給大家講解一下Android BaseAdapter(基礎介面卡)的用法,介面卡的作用主要是用來給諸如(Spinner、ListView、GridView)來填充資料的。而(Spinner、ListView、GridView)都有自己的介面卡(記起來麻煩)。但是BaseAdapter(一招鮮)對他們來說卻是通用的,為什麼這麼說呢,首先我們看一下API文件:

BaseAdapter API

我們看到Android BaseAdapter已經實現了ListAdapter和SpinnerAdapter的介面,而GridView的介面卡是實現了ListAdapter介面,只不過是二維的。所以說BaseAdapter對他們三者來說是通用的。

下面我來說一下BaseAdapter的主要用法,就是我們定義一個類(如:MyAdapter)而這個類繼承BaseAdapter.因為它是implements了ListAdapter和SpinnerAdapter的介面,所以要實現裡面的方法,程式碼如下(未作任何改動的):

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 private class MyAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub
return 0; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub
return null; } }

為了便於大家理解,老規矩寫一個簡單的Demo,大家按我的步驟來就OK了。

第一步:新建一個Android工程命名為BaseAdapterDemo

第二步:修改main.xml程式碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?xml version="1.0" encoding="utf-8"?> android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Welcome to Mr Wei's Blog" /> <Spinner android:id="@+id/spinner" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>

第三步:修該BaseAdapterDemo.java程式碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 package com.tutor.baseadapter; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.ListView; import android.widget.Spinner; import android.widget.TextView; public class BaseAdapterDemo extends Activity { private Spinner mSpinner; private ListView mListView; private GridView mGridView; private MyAdapter mMyAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setupViews(); } public void setupViews() { mMyAdapter = new MyAdapter(); mSpinner = (Spinner) findViewById(R.id.spinner); mSpinner.setAdapter(mMyAdapter); mListView = (ListView) findViewById(R.id.listview); mListView.setAdapter(mMyAdapter); mGridView = (GridView) findViewById(R.id.gridview); mGridView.setAdapter(mMyAdapter); mGridView.setNumColumns(2); } // 定義自己的介面卡,注意getCount和getView方法 private class MyAdapter extends BaseAdapter { @Override public int getCount() { // 這裡我就返回10了,也就是一共有10項資料項 return 10; } @Override public Object getItem(int arg0) { return arg0; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // position就是位置從0開始,convertView是Spinner,ListView中每一項要顯示的view // 通常return 的view也就是convertView // parent就是父窗體了,也就是Spinner,ListView,GridView了. TextView mTextView = new TextView(getApplicationContext()); mTextView.setText("BaseAdapterDemo"); mTextView.setTextColor(Color.RED); return mTextView; } } }

第四步:執行程式效果圖如下:

效果圖一:

BaseAdapterDemo效果1

效果圖二:

BaseAdapterDemo效果2

等等,平時我在這裡就和大家告別了,今天還沒完呵呵,因為下面是我們的重點了,我們平常看的應用列表什麼的,不是單單的一個TextView就可以了事的,所以我們可以在Layout裡事先定義好佈局。這裡我新建了一個名叫baseadapter_provider.xml檔案,程式碼如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?xml version="1.0" encoding="utf-8"?> android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/icon" /> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BaseAdapter" /> </LinearLayout>

將getView()方法修改如下:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @Override public View getView(int position, View convertView, ViewGroup parent) { // position就是位置從0開始,convertView是Spinner,ListView中每一項要顯示的view // 通常return 的view也就是convertView // parent就是父窗體了,也就是Spinner,ListView,GridView了. // TextView mTextView = new TextView(getApplicationContext()); // mTextView.setText("BaseAdapterDemo"); // mTextView.setTextColor(Color.RED); // return mTextView; //LayoutInflater不會的參照我的 Android 高手進階教程(五) convertView = LayoutInflater.from(getApplicationContext()).inflate (R.layout.baseadapter_provider,null); TextView mTextView = (TextView)convertView.findViewById(R.id.textview); mTextView.setText("BaseAdapterDemo" + position); mTextView.setTextColor(Color.RED); return convertView; }

再次執行看一下效果圖如下:

BaseAdapterDemo最終效果