现在的位置: 首页 > 综合 > 正文

BaseAdapter使用

2013年09月20日 ⁄ 综合 ⁄ 共 12524字 ⁄ 字号 评论关闭

大家好!今天给大家讲解一下BaseAdapter(基础适配器)的用法,适配器的作用主要是用来给诸如(Spinner,ListView,GridView)来填充数据的。而(Spinner,ListView,GridView)都有自己的适配器(记起来麻烦)。但是BaseAdapter(一招鲜)对他们来说却是通用的,为什么这么说呢,首先我们看一下API文档:
 

我们看一下BaseAdapter已经实现了ListAdapter和SpinnerAdapter的接口,而GridView的适配器是实现了ListAdapter接口,只不过是二维的。所以说BaseAdapter对他们三者来说是通用的。
 
下面我来说一下BaseAdapter的主要用法.就是我们定义一个类(如:MyAdapter)而这个类继承BaseAdapter.因为它是implements了ListAdapter和SpinnerAdapter的接口,所以要实现里面的方法,代码如下(未作任何改动的):

 

view plaincopy to clipboardprint?
 01.private class MyAdapter extends BaseAdapter{     
 02.    @Override    
 03.    public int getCount() {     
 04.        // TODO Auto-generated method stub     
 05.        return 0;     
 06.    }     
 07.    @Override    
 08.    public Object getItem(int arg0) {     
 09.        // TODO Auto-generated method stub     
 10.        return null;     
 11.    }     
 12.    @Override    
 13.    public long getItemId(int position) {     
 14.        // TODO Auto-generated method stub     
 15.        return 0;     
 16.    }     
 17.    @Override    
 18.    public View getView(int position, View convertView, ViewGroup parent) {     
 19.        // TODO Auto-generated method stub     
 20.        return null;     
 21.    }     
 22.         
 23.   }   
 

 

view plaincopy to clipboardprint?
01.private class MyAdapter extends BaseAdapter{    
02.    @Override   
03.    public int getCount() {    
04.        // TODO Auto-generated method stub    
05.        return 0;    
06.    }    
07.    @Override   
08.    public Object getItem(int arg0) {    
09.        // TODO Auto-generated method stub    
10.        return null;    
11.    }    
12.    @Override   
13.    public long getItemId(int position) {    
14.        // TODO Auto-generated method stub    
15.        return 0;    
16.    }    
17.    @Override   
18.    public View getView(int position, View convertView, ViewGroup parent) {    
19.        // TODO Auto-generated method stub    
20.        return null;    
21.    }    
22.        
23.   }   

为了便于大家理解,老规矩写一个简单的Demo,大家按我的步骤来就OK了.
 
第一步:新建一个Android工程命名为BaseAdapterDemo.
 
第二步:修改main.xml代码如下:

 

view plaincopy to clipboardprint?
 01.<?xml version="1.0" encoding="utf-8"?>     
 02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
 03.    android:orientation="vertical"    
 04.    android:layout_width="fill_parent"    
 05.    android:layout_height="fill_parent"    
 06.    >     
 07.    <TextView       
 08.        android:layout_width="fill_parent"      
 09.        android:layout_height="wrap_content"      
 10.        android:text="Welcome to Mr Wei's Blog"    
 11.    />     
 12.    <Spinner       
 13.        android:id="@+id/spinner"    
 14.        android:layout_width="fill_parent"      
 15.        android:layout_height="wrap_content"    
 16.    />     
 17.      <ListView       
 18.        android:id="@+id/listview"    
 19.        android:layout_width="fill_parent"      
 20.        android:layout_height="wrap_content"    
 21.    />     
 22.      <GridView       
 23.        android:id="@+id/gridview"    
 24.        android:layout_width="fill_parent"      
 25.        android:layout_height="wrap_content"    
 26.    />     
 27.</LinearLayout>   
 

 

view plaincopy to clipboardprint?
01.<?xml version="1.0" encoding="utf-8"?>    
02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
03.    android:orientation="vertical"   
04.    android:layout_width="fill_parent"   
05.    android:layout_height="fill_parent"   
06.    >    
07.    <TextView      
08.        android:layout_width="fill_parent"     
09.        android:layout_height="wrap_content"     
10.        android:text="Welcome to Mr Wei's Blog"   
11.    />    
12.    <Spinner      
13.        android:id="@+id/spinner"   
14.        android:layout_width="fill_parent"     
15.        android:layout_height="wrap_content"   
16.    />    
17.      <ListView      
18.        android:id="@+id/listview"   
19.        android:layout_width="fill_parent"     
20.        android:layout_height="wrap_content"   
21.    />    
22.      <GridView      
23.        android:id="@+id/gridview"   
24.        android:layout_width="fill_parent"     
25.        android:layout_height="wrap_content"   
26.    />    
27.</LinearLayout>   

第三步:修该BaseAdapterDemo.java代码如下:

 

view plaincopy to clipboardprint?
 01.package com.tutor.baseadapter;     
 02.import android.app.Activity;     
 03.import android.graphics.Color;     
 04.import android.os.Bundle;     
 05.import android.view.View;     
 06.import android.view.ViewGroup;     
 07.import android.widget.BaseAdapter;     
 08.import android.widget.GridView;     
 09.import android.widget.ListView;     
 10.import android.widget.Spinner;     
 11.import android.widget.TextView;     
 12.public class BaseAdapterDemo extends Activity {     
 13.        
 14.    private Spinner mSpinner;     
 15.    private ListView mListView;     
 16.    private GridView mGridView;     
 17.    private MyAdapter mMyAdapter;     
 18.    @Override    
 19.    public void onCreate(Bundle savedInstanceState) {     
 20.        super.onCreate(savedInstanceState);     
 21.        setContentView(R.layout.main);     
 22.        setupViews();     
 23.    }     
 24.         
 25.    public void setupViews(){     
 26.        mMyAdapter = new MyAdapter();     
 27.        mSpinner = (Spinner)findViewById(R.id.spinner);     
 28.        mSpinner.setAdapter(mMyAdapter);     
 29.        mListView = (ListView)findViewById(R.id.listview);     
 30.        mListView.setAdapter(mMyAdapter);     
 31.        mGridView = (GridView)findViewById(R.id.gridview);     
 32.        mGridView.setAdapter(mMyAdapter);     
 33.        mGridView.setNumColumns(2);     
 34.         
 35.    }     
 36.         
 37.    //定义自己的适配器,注意getCount和getView方法     
 38.    private class MyAdapter extends BaseAdapter{     
 39.        @Override    
 40.        public int getCount() {     
 41.            // 这里我就返回10了,也就是一共有10项数据项     
 42.            return 10;     
 43.        }     
 44.        @Override    
 45.        public Object getItem(int arg0) {     
 46.            return arg0;     
 47.        }     
 48.        @Override    
 49.        public long getItemId(int position) {     
 50.            return position;     
 51.        }     
 52.        @Override    
 53.        public View getView(int position, View convertView, ViewGroup parent) {     
 54.            // position就是位置从0开始,convertView是Spinner,ListView中每一项要显示的view     
 55.            //通常return 的view也就是convertView     
 56.            //parent就是父窗体了,也就是Spinner,ListView,GridView了.     
 57.            TextView mTextView = new TextView(getApplicationContext());     
 58.            mTextView.setText("BaseAdapterDemo");     
 59.            mTextView.setTextColor(Color.RED);     
 60.            return mTextView;     
 61.        }     
 62.             
 63.    }     
 64.}   
 

 

view plaincopy to clipboardprint?
01.package com.tutor.baseadapter;    
02.import android.app.Activity;    
03.import android.graphics.Color;    
04.import android.os.Bundle;    
05.import android.view.View;    
06.import android.view.ViewGroup;    
07.import android.widget.BaseAdapter;    
08.import android.widget.GridView;    
09.import android.widget.ListView;    
10.import android.widget.Spinner;    
11.import android.widget.TextView;    
12.public class BaseAdapterDemo extends Activity {    
13.       
14.    private Spinner mSpinner;    
15.    private ListView mListView;    
16.    private GridView mGridView;    
17.    private MyAdapter mMyAdapter;    
18.    @Override   
19.    public void onCreate(Bundle savedInstanceState) {    
20.        super.onCreate(savedInstanceState);    
21.        setContentView(R.layout.main);    
22.        setupViews();    
23.    }    
24.        
25.    public void setupViews(){    
26.        mMyAdapter = new MyAdapter();    
27.        mSpinner = (Spinner)findViewById(R.id.spinner);    
28.        mSpinner.setAdapter(mMyAdapter);    
29.        mListView = (ListView)findViewById(R.id.listview);    
30.        mListView.setAdapter(mMyAdapter);    
31.        mGridView = (GridView)findViewById(R.id.gridview);    
32.        mGridView.setAdapter(mMyAdapter);    
33.        mGridView.setNumColumns(2);    
34.        
35.    }    
36.        
37.    //定义自己的适配器,注意getCount和getView方法    
38.    private class MyAdapter extends BaseAdapter{    
39.        @Override   
40.        public int getCount() {    
41.            // 这里我就返回10了,也就是一共有10项数据项    
42.            return 10;    
43.        }    
44.        @Override   
45.        public Object getItem(int arg0) {    
46.            return arg0;    
47.        }    
48.        @Override   
49.        public long getItemId(int position) {    
50.            return position;    
51.        }    
52.        @Override   
53.        public View getView(int position, View convertView, ViewGroup parent) {    
54.            // position就是位置从0开始,convertView是Spinner,ListView中每一项要显示的view    
55.            //通常return 的view也就是convertView    
56.            //parent就是父窗体了,也就是Spinner,ListView,GridView了.    
57.            TextView mTextView = new TextView(getApplicationContext());    
58.            mTextView.setText("BaseAdapterDemo");    
59.            mTextView.setTextColor(Color.RED);    
60.            return mTextView;    
61.        }    
62.            
63.    }    
64.}   

第四步:运行程序效果图如下:
 
效果图一:

 

效果图二:

等等,平时我在这里就和大家告别了,今天还没完呵呵,因为下面是我们的重点了,我们平常看的应用列表什么的,不是单单的一个TextView就可以了事的,所以我们可以在Layout里事先 定义好布局。这里我新建了一个名叫baseadapter_provider.xml文件,代码如下:

 

view plaincopy to clipboardprint?
 01.<?xml version="1.0" encoding="utf-8"?>     
 02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    
 03.    android:orientation="horizontal"    
 04.    android:layout_width="fill_parent"    
 05.    android:layout_height="fill_parent"    
 06.    >     
 07.    <ImageView     
 08.        android:id="@+id/imageView"       
 09.        android:layout_width="wrap_content"      
 10.        android:layout_height="wrap_content"      
 11.        android:src="@drawable/icon"    
 12.    />     
 13.    <TextView     
 14.        android:id="@+id/textview"       
 15.        android:layout_width="wrap_content"      
 16.        android:layout_height="wrap_content"      
 17.        android:text="BaseAdapter"    
 18.    />     
 19.</LinearLayout>   
 

 

view plaincopy to clipboardprint?
01.<?xml version="1.0" encoding="utf-8"?>    
02.<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
03.    android:orientation="horizontal"   
04.    android:layout_width="fill_parent"   
05.    android:layout_height="fill_parent"   
06.    >    
07.    <ImageView    
08.        android:id="@+id/imageView"      
09.        android:layout_width="wrap_content"     
10.        android:layout_height="wrap_content"     
11.        android:src="@drawable/icon"   
12.    />    
13.    <TextView    
14.        android:id="@+id/textview"      
15.        android:layout_width="wrap_content"     
16.        android:layout_height="wrap_content"     
17.        android:text="BaseAdapter"   
18.    />    
19.</LinearLayout>   

将getView()方法修改如下:

 

view plaincopy to clipboardprint?
 01.@Override    
 02.        public View getView(int position, View convertView, ViewGroup parent) {     
 03.            // position就是位置从0开始,convertView是Spinner,ListView中每一项要显示的view     
 04.            //通常return 的view也就是convertView     
 05.            //parent就是父窗体了,也就是Spinner,ListView,GridView了.     
 06.//          TextView mTextView = new TextView(getApplicationContext());     
 07.//          mTextView.setText("BaseAdapterDemo");     
 08.//          mTextView.setTextColor(Color.RED);     
 09.//          return mTextView;     
 10.                 
 11.            //LayoutInflater不会的参照我的 Android 高手进阶教程(五)     
 12.            convertView = LayoutInflater.from(getApplicationContext()).inflate     
 13.            (R.layout.baseadapter_provider,null);     
 14.                 
 15.            TextView mTextView = (TextView)convertView.findViewById(R.id.textview);     
 16.            mTextView.setText("BaseAdapterDemo" + position);     
 17.            mTextView.setTextColor(Color.RED);     
 18.            return convertView;     
 19.        }   
 

 

view plaincopy to clipboardprint?
01.@Override   
02.        public View getView(int position, View convertView, ViewGroup parent) {    
03.            // position就是位置从0开始,convertView是Spinner,ListView中每一项要显示的view    
04.            //通常return 的view也就是convertView    
05.            //parent就是父窗体了,也就是Spinner,ListView,GridView了.    
06.//          TextView mTextView = new TextView(getApplicationContext());    
07.//          mTextView.setText("BaseAdapterDemo");    
08.//          mTextView.setTextColor(Color.RED);    
09.//          return mTextView;    
10.                
11.            //LayoutInflater不会的参照我的 Android 高手进阶教程(五)    
12.            convertView = LayoutInflater.from(getApplicationContext()).inflate    
13.            (R.layout.baseadapter_provider,null);    
14.                
15.            TextView mTextView = (TextView)convertView.findViewById(R.id.textview);    
16.            mTextView.setText("BaseAdapterDemo" + position);    
17.            mTextView.setTextColor(Color.RED);    
18.            return convertView;    
19.        }   

再次运行看一下效果图如下:

 

Ok,搞定了,呵呵~!

抱歉!评论已关闭.