ListView

一,課程目標(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。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容