一,課程目標(biāo)
1,理解ListView的基礎(chǔ)使用
2,學(xué)會(huì)熟練運(yùn)用兩種適配器
(ArrayAdapter, SimpleAdapter)
3, 學(xué)會(huì)熟練運(yùn)用兩種監(jiān)聽器
(OnScrollListener, OnIntemClickListener)
4, 學(xué)會(huì)熟練運(yùn)用適配器數(shù)據(jù)的刷新
(notifyDataChanged)
二,ListView
1,ListView的作用: android系統(tǒng)中顯示列表的控件;
2,ListView 控件:每一個(gè)ListView都可以包含很多個(gè)列表項(xiàng)
三,數(shù)據(jù)適配器
數(shù)據(jù)適配器的作用:把復(fù)雜的數(shù)據(jù)(數(shù)組、鏈表、集合、數(shù)據(jù)庫(kù)等)填充在指定視圖界面上;
ArrayAdapter(數(shù)據(jù)適配器):用于綁定格式單一的數(shù)據(jù)
數(shù)據(jù)源:可以是集合或數(shù)組
SimpleAdapter(簡(jiǎn)單適配器):用于綁定格式復(fù)雜的數(shù)據(jù)
數(shù)據(jù)源:只能是特定泛型的集合
數(shù)據(jù)適配器是連接數(shù)據(jù)源和視圖界面的橋梁;
四,實(shí)例:
private ListView listView;
private ArrayAdapter<String> arr_adapter;
private SimpleAdapter simp_adapter;
listView =(ListView)findViewById(R.id.listview);
//1,新建一個(gè)數(shù)據(jù)適配器
ArrayAdapter(上下文,當(dāng)前ListView加載的每一個(gè)列表所對(duì)應(yīng)的布 局文件,數(shù)據(jù)源)
系
//2,適配器加載數(shù)據(jù)源
String[] arr_data={"慕課網(wǎng)1","慕課網(wǎng)2","慕課網(wǎng)3","慕課網(wǎng)4"};
arr_adapter=new ArrayAdapter<string>(this,android.R.layout.simple_list_item_1,arr_data);
//3,視圖(ListView)加載適配器
listView.setAdapter(arr_adapter);
SimpleAdapter(context,data,resource,from,to)
context:上下文
data:數(shù)據(jù)源
數(shù)據(jù)源List<? extends Map<String,?>> data
一個(gè)Map所組成的List集合
每一個(gè)Map都會(huì)對(duì)應(yīng)ListView中的一行
每一個(gè)Map(鍵--值對(duì))中的鍵必須包含所有在from中所指定的值
resource:列表項(xiàng)的布局文件ID
from:Map中的鍵名
to:綁定數(shù)據(jù)視圖中的ID,與from成對(duì)應(yīng)關(guān)系
四,監(jiān)聽器
作用:android提供了很多事件監(jiān)聽器,監(jiān)聽器主要是為了響應(yīng)某個(gè)動(dòng)作,
這個(gè)動(dòng)作可以是用戶操作的,也可以是android系統(tǒng)本身發(fā)出的。
我們可以通過監(jiān)控這個(gè)動(dòng)作飛行為,來完成我們需要的程序功能;
OnItemClickListener:
可以處理視圖中單個(gè)條目的點(diǎn)擊事件;
OnScrollListener:
監(jiān)聽滾動(dòng)的變化,可以用于視圖在滾動(dòng)中加載數(shù)據(jù);
監(jiān)聽器是程序和用戶(或系統(tǒng))交互的橋梁;
五,onItemClick(AdapterView<?> parent ,View view, int position ,long id)詳解
public void onItemClick (AdapterView<?> parent, View view,int position,long id)
假設(shè)有X, Y兩個(gè)listview,
X里有1,2,3,4這4個(gè)item,
-
Y里有a,b,c,d這4個(gè)item。
如果你點(diǎn)了b這個(gè)item。則有如下:public void onItemClick (AdapterView<?> parent, View view,int position,long id)
// parent相當(dāng)于listview Y適配器的一個(gè)指針,可以通過它來獲得Y里裝著的一切東西,再通俗點(diǎn)就是說告訴你,你點(diǎn)的是Y,不是X
View view,
// view是你點(diǎn)b item的view的句柄,就是你可以用這個(gè)view,來獲得b里的控件的id后操作控件
int position,
// position是b在Y適配器里的位置(生成listview時(shí),適配器一個(gè)一個(gè)的做item,然后把他們按順序排好隊(duì),在放到listview里,
意思就是這個(gè)b是第position號(hào)做好的)
long id
// id是b在listview Y里的第幾行的位置(很明顯是第2行),大部分時(shí)候position和id的值是一樣的,- 如果需要的話,你可以自己加個(gè)log把position和id都弄出來在logcat里瞅瞅,看了之后心里才踏實(shí))
PS:需要注意區(qū)分position與long id的區(qū)別。position事實(shí)上就是ListView中被點(diǎn)擊的view的位置,
注意,在ListView中是不負(fù)責(zé)處理headerView和footViewer的,
所以,這個(gè)位置position應(yīng)該是這個(gè)被點(diǎn)擊的view在數(shù)組[所有的headerView,用戶添加的view,所有的footerView]中的位置,
而id是來自于adapter.getItemId(position)。當(dāng)用戶添加了footView或者h(yuǎn)eadView后可能會(huì)導(dǎo)致position和id的值不同。
事實(shí)上,如果position指向了headerView或footerView,那么返回-1,否則,將返回在用戶view數(shù)組的位置。
也就是說id=position-headerView的個(gè)數(shù)(id < headerviewer的個(gè)數(shù)+用戶view的個(gè)數(shù)),否則返回-1。
- 如果需要的話,你可以自己加個(gè)log把position和id都弄出來在logcat里瞅瞅,看了之后心里才踏實(shí))