ArrayAdaapter,SimpleAdapter,BaseAdapter的使用
1. ArrayAdapter
ArrayAdapter<String> adapter = new rrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,data);
listView.setAdapter(adapter);
- 第一個參數:this這是上下文
第二個參數:這裏採用的是系統自帶的樣式,當讓我們也可以自定義
simple_list_item_1 : 單獨一行的文本框
simple_list_item_2 : 兩個文本框組成
simple_list_item_checked : 每項都是由一個已選中的列表項
simple_list_item_multiple_choice : 都帶有一個複選框
simple_list_item_single_choice : 都帶有一個單選鈕第三個參數:數據資源,數據資源可以是集合,數組或者是數組資源(R文件)
2.SimpleAdapter
SimpleAdapter相對ArrayAdapter就比較高級啦,它可以放置文本和片,功能也比較強大
SimpleAdapter myAdapter = new SimpleAdapter(
getApplicationContext(),
listitem,
R.layout.list_item,
new String[]{"img", "text1", "tex1t"},
new int[]{R.id.imgtou, R.id.name, R.id.says}
);
ListView listView = (ListView) findViewById(R.id.list_test);
listView.setAdapter(myAdapter);
- 第一個參數:上下文
- 第二個參數:數據資源
- 第三個參數:佈局資源
- 第四個參數:創建一個數組
- 第五個參數:佈局資源中組件的id
3. BaseAdapter
該BaseAdapter是大多數適配器的基類,我們可以自定義,使用起來比較靈活,也是大多數程序猿的大愛
java代碼:
class MyBaseAdapter extends BaseAdapter {
//獲取當前items項的大小,也可以看成是數據源的大小
@Override
public int getCount() {
return list.size();
}
//根據item的下標獲取到View對象
@Override
public Object getItem(int position) {
return list.get(position);
}
//獲取到items的id
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertview, ViewGroup viewGroup) {
/*ViewHolder通常出現在適配器裏,爲的是listview滾動的時候快速設置值,而不必每次都重新創建很多對象,從而提升性能。*/
ViewHolder holder = null;
if (convertview == null) {
convertview = View.inflate(TraficLightActivity.this, R.layout.traffic_item, null);
holder = new ViewHolder();
holder.road_id = (TextView) convertview.findViewById(R.id.road_id);
holder.redTime = (TextView) convertview.findViewById(R.id.red_time);
holder.greenTime = (TextView) convertview.findViewById(R.id.green_time);
holder.yellowTime = (TextView) convertview.findViewById(R.id.yelow_time);
convertview.setTag(holder);
} else {
holder = (ViewHolder) convertview.getTag();
}
mRoadLightInfo = list.get(position);
//setText要設置的內容:如果是取出來的數據是int類型的,那麼,不會直接設置內容
//會去R類裏去找對應的數據,如果沒有,就會報資源找不到的異常
holder.road_id.setText(mRoadLightInfo.getRoadId() + "路口");
holder.redTime.setText(mRoadLightInfo.getRedTime());
holder.greenTime.setText(mRoadLightInfo.getGreenTime());
holder.yellowTime.setText(mRoadLightInfo.getYellowTime());
return convertview;
}
}
class ViewHolder {
TextView road_id;
TextView redTime;
TextView reenTime;
TextView yellowTime;
}
該類採用內部類MyBaseAdapter,該類繼承了BaseAdapter,同時重寫了四個方法。在是個方法中我們主要是重寫getView方法。此外,我們爲了不重新創建許多對象,我們採用了ViewHolder類,在該類中我們定義了幾個屬性。getView方法中我們首先獲取view視圖,並且獲取裏面的各個組件,給各個組件賦值。