listview的工做機制

  listView在開始繪製的時候,系統首先調用getCount()函數,根據他的返回值獲得listView的長度,而後根據這個長度,調用getView()逐一繪製每一行。前端

 系統顯示列表時,首先實例化一個適配器(這裏將實例化自定義的適配器)。當手動完成適配時,必須手動映射數據,這須要重寫getView()方法。系統在繪製列表的每一行的時候將調用此方法。getView()有三個參數,position表示將顯示的是第幾行,covertView是從佈局文件中inflate來的佈局。咱們用LayoutInflater的方法將定義好的item.xml文件提取成View實例用來顯示。而後將xml文件中的各個組件實例化(簡單的view.findViewById()方法)。這樣即可以將數據對應到各個組件上了。可是爲了響應點擊事件,須要爲它添加點擊監聽器,這樣就能捕獲點擊事件。系統要繪製ListView了,他首先得到要繪製的這個列表的長度,而後開始繪製第一行,怎麼繪製呢?調用getView()函數。在這個函數裏面首先得到一個View(其實是一個ViewGroup),而後再實例並設置各個組件,顯示之。好了,繪製完這一行了。那再繪製下一行,直到繪完爲止。後端

 

    Adapter是鏈接後端數據和前端顯示的適配器接口,是數據和UI(View)之間一個重要的紐帶。在常見的View(ListView,GridView)等地方都須要用到Adapter。ide

例子:函數

//上下文,自定義的listview元素項佈局,listview對應的list佈局

MineTravelAdapter mineTravelAdapter = new MineTravelAdapter(MineActivity.this, R.layout.mine_travel_item, mineTravel);this

listView.setAdapter(mineTravelAdapter);xml

 

private class MineMoodAdapter extends ArrayAdapter<MineMoodItem> {接口

private int resourceId;事件

public MineMoodAdapter(Context context, int resource,List<MineMoodItem> objects) {
super(context, resource, objects);
resourceId = resource;
}get

@Override
public View getView(int position, View convertView, ViewGroup parent) {
MineMoodItem mineMood = getItem(position);// 獲取當前項的MineMood實例

View view = LayoutInflater.from(getContext()).inflate(resourceId,null);  //得到listview的子項佈局

// 獲取子項佈局裏面的文本控件
TextView mineMoodTime = (TextView) view.findViewById(R.id.time);  //注意是view.findViewById();
TextView mineMoodSpotname = (TextView) view.findViewById(R.id.spotname);

// 填充數據
mineMoodTime.setText(mineMood.getTime());
mineMoodSpotname.setText(mineMood.getSpotName());
return view;
}

}

相關文章
相關標籤/搜索