概述:
(1)ListView:Android中顯示列表的控件
(2)數據適配器: 向控件提供數據源,把複雜的數據填充在指定視圖界面上,是連接數據源和視圖界面的橋樑。
A. ArrayAdapter :綁定格式單一的數據,數據源可以是集合或數組。
B. SimpleAdapter:綁定格式複雜的數據,數據源只能是特定泛型的集合。
適配器的實現:新建適配器——>添加數據源到適配器——>視圖加載適配器。
(I)新建適配器:ArrayAdapter(上下文,當前listView加載的每一個列表項所對應的佈局文件,數據源);
SimpleAdapter(context,data,resource,from,to);
//context: 上下文,this
//data: 數據源(list<? extends Map<String,?>> data)一個Map所組成的List集合,如 List<Map<String,Object>> list;
每一個Map都對應ListView列表中的一行
每一個Map(鍵-值對)中的鍵必須包含所有在from中所指定的鍵
自定義一個函數,初始化list,如
private List<Map<String,Object>> getData()
{
for(int i=0;i<20;i++)
Map<String,Object> map=new HashMap<String,Object>();
map.put("PIC",R.drawable.圖片名);
map.put("TEXT","慕課網"+i);
list.add(map);
}
return list;
}
//resource:列表項的佈局文件ID,新建一個佈局XML文件,佈置每一項(行)的佈局,相當於項的佈局模板,如item.XML,則ID爲R.layout.item
//from: Map中的鍵名,new String[]={"PIC","TEXT"};
//to: 綁定數據視圖中的ID,與from成對應關係 ,item.XML中的ID。如new int[]{R.id.XXX,R.id.YYY}
(II)添加數據源到適配器
String[] arry_data={"慕課網1","www.imooc.com"};
arr_adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arry_data);
(III)視圖加載適配器
listView.setAdapter(arr_adapter);
(3)監聽器 ,程序和用戶(或系統)交互的橋樑,每個監聽器都是一個接口。
實現:讓Activity類繼承實現OnScrollListener、OnItemClickListener接口,並重寫接口的方法,最後讓listView加載這些監聽器,即listView.setOnItemClickListener(this)、listView.setOnScrollListener(this);
A. OnScrollListener
public void onScrollStateChanged(**,int scrollState)
{
switch(scrollState)
{
case SCROLL_STATE_FLING: //手指離開前 用力滑動,依靠慣性滾動ListView,此時手指已離開屏幕
可以在滾動時做動態添加item項
Map<String,Object> map=new Map<String,Object>();
map.put("PIC",值);
map.put("TEXT",值);
list.add(map);
simp_adapter.notifyDataSetChanged();//通知UI主線程去更新,以適應數據源的變化。
break;
case SCROLL_STATE_IDLE: //ListView停止滑動
break;
case SCROLL_STATE_TOUCH_SCROLL: //ListView正在滑動,手指沒有離開屏幕
break;
}
}
public void onScroll()
{
}
B. OnItemClickListener
void onItemClick(**,**,position,**)
{
String text=listView.getItemAtPosition(position);
Toast.makeText(this,內容,Toast.LENGTH_SHORT).show();
}
(4)刷新適配器數據
notifyDataSetChanged