安卓adapter適配器

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視圖,並且獲取裏面的各個組件,給各個組件賦值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章