ListView是Android開發(fā)中最常用的組件拂檩,基本上每一個安卓應用都會使用ListView齐鲤。在使用ListView的時候一定會使用到Adapter(適配器)埠戳。
ListView中常用的適配器有三種趟畏,分別是:BaseAdapter大磺、SimpleAdapter抡句、ArrayAdapter。這里的適配器其實就是相當于把數(shù)據映射到ListView上的中介杠愧。
接下來就來看看ListView的具體使用和適配器的功能吧待榔。
首先,來看幾個 ListView常見的屬性:
屬性名稱 | 屬性功能 |
---|---|
android:cacheColorHint | 設置拖動的背景色 |
android:divider | 設置分割線 |
android:dividerHeight | 設置分割線的高度 |
android:listSelector | 設置ListView item選中時的顏色 |
android:scrollbars | 設置Listview的滾動條 |
android:fadeScrollbars | 設置為true就可以實現(xiàn)滾動條的自動隱藏和顯示 |
接下來我們就來看一下ListView的適配器:
1殴蹄、BaseAdapter
它是基本上就是一個抽象類究抓。其中包含4個抽象方法,分別用于設置Item的總數(shù)袭灯、獲取Item對象刺下、獲取Item id、得到Item視圖稽荧。在使用BaseAdapter對ListView進行適配時橘茉,需要創(chuàng)建一個類工腋,并繼承并重寫B(tài)aseAdapter中的四個抽象方法。BaseAdapter的四個抽象方法分別是 getCount()畅卓、getItem(int position)擅腰、getItemId(int position)、getView(int position, View convertView, ViewGroup parent)翁潘。
我們現(xiàn)在就用一個“應用市場”的小例子看一下BaseAdapter的使用:
創(chuàng)建一個新的項目取名為DemoListView趁冈,然后在布局文件(activity_main.xml)里代碼如下:
<ListView android:id="@+id/lv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="5dp"/>
其實只添加這一個組件之后效果是這樣的:
再創(chuàng)建一個Xml文件命名為list_item.xml:
<ImageView
android:id="@+id/iv_image"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="10dp" />
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginLeft="5dp"
android:textSize="20sp" />
然后在MainActivity中添加代碼:(其中,定義了兩個數(shù)組拜马,一個用來存放App的名字渗勘,一個是用來存放App的圖標,圖片都放在了drawable文件夾里面了)
private ListView mListView;
private int [] icons={R.drawable.jd,R.drawable.qq,R.drawable.qq_dizhu,R.drawable.sina,R.drawable.tmall,R.drawable.uc,R.drawable.weixin};//準備數(shù)據
private String[] appName={"京東","QQ","斗地主","新浪","天貓","UC瀏覽器","微信"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView=(ListView) findViewById(R.id.lv_list);
//創(chuàng)建一個Adapter實例
MyAdapter adapter=new MyAdapter();
//設置Adapter
mListView.setAdapter(adapter);
}
//創(chuàng)建一個類并集成BaseAdapter
class MyAdapter extends BaseAdapter {
//得到Item的總數(shù)
@Override
public int getCount() {
//返回ListView Item條目的總數(shù)
return appName.length;
}
@Override
public Object getItem(int position) {
// 返回ListView Item代表的對象
return appName[position];
}
@Override
public long getItemId(int position) {
// 返回ListView Item條目的Id
return position;
}
@Override
public View getView(int position, View contentView, ViewGroup parent) {
// 將list_item.xml文件找出來并轉化成View對象
View view=View.inflate(MainActivity.this, R.layout.list_item, null);
TextView mTvName=(TextView) view.findViewById(R.id.tv_name);
mTvName.setText(appName[position]);
ImageView mIvimage=(ImageView) view.findViewById(R.id.iv_image);
mIvimage.setBackgroundResource(icons[position]);
return view;
}
}
之后這個小小的例子就完成了俩莽,然后就讓我們看一下效果吧:
2旺坠、SimpleAdapter
繼承自BaseAdapter,實現(xiàn)了BaseAdapter的4個抽象方法扮超。因此在使用時直接創(chuàng)建SimpleAdapter的實例即可取刃。
它的構造方法為:
public Jfgbl(Context context, List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
}
里面的參數(shù):
- Context context Context對象,getView()方法中需要用到Context將布局轉換成View對象出刷。
- List<? extends Map<String, ?>> data:數(shù)據集合
- int resource Item布局的資源Id
-String[] from Map集合里面的key
-int[] to Item布局相應的空間Id
*SimpleAdapter只能適配Checkable璧疗、TextView、ImageView巷蚪。
3病毡、ArrayAdapter
ArrayAdapter也是BaseAdapter的子類,其用法與SimpleAdapter類似屁柏。
它的構造方法是:
public DFggv(Context context, int resource, int textViewResourceId,
T[] objects) {
super(context, resource, textViewResourceId, objects);
}
- Context context Context對象啦膜。
- int resource Item布局的資源Id。
- int textViewResourceId Item布局相對應的控件TextView的Id淌喻。
- <T> objects 需要適配的數(shù)據數(shù)組僧家。