天天看點

Android系列之Fragment(四)----ListFragment的使用

【正文】

一、listfragement的介紹:

listfragment繼承于fragment。是以它具有fragment的特性,能夠作為activity中的一部分,目的也是為了使頁面設計更加靈活。相比fragment,listfragment的内容是以清單(list)的形式顯示的。

1、listfragment布局:

listfragment的預設布局包含一個list view。是以,在listfragment對應的布局檔案中,必須指定一個 android:id 為 “@android:id/list” 的listview控件! 若使用者想修改listview,可以在oncreateview(layoutinflater, viewgroup, bundle)中進行修改。當然,使用者也可以在listfragment的布局中包含其它的控件。

下面是官方文檔中listfragment對應的一個layout示例:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

listview中每一行的顯示内容,是通過設定擴充卡listadapter來實作的。我們既可以自定義,也可以采用系統預設的layout。後面的應用執行個體中,會分别列舉2種情況下的顯示

2、綁定資料:

listfragment綁定listview的資料(即綁定擴充卡)時,必須通過listfragment.setlistadapter()接口來綁定資料,而不是使用listview.setadapter() 或其它方法

二、通過arrayadapter來加載listfragment的舉例:

【舉例】現在将平闆電腦分成三部分:點選左側的按鈕,出現中間的新聞标題清單(listfragment),點選中間listfragment的某個item,在最右側的fragment中顯示詳情。

建立工程檔案m01_listfragment01:

(1)定義activity_main.xml的布局:

activity_main.xml的代碼如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

實際上配置設定了三個線性布局,左側顯示按鈕,中間顯示标題,右側顯示詳情。這個布局檔案對應的可視化界面如下:

Android系列之Fragment(四)----ListFragment的使用

(2)定義中間的listfragment,即建立檔案articlelistfragment.java:

articlelistfragment.java的代碼如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

核心代碼是22至32行:我們讓這個fragment繼承listfragment,然後在oncreate()方法中定義一個arrayadapter,将資料放進去,最後綁定擴充卡就行了。需要注意的是,由于我們繼承的是listfragment,這個fragment預設自帶了一個布局,是以我們不需要重新建立布局檔案了。

(3)将中間的listfragment加載到activity當中去。當我們點選按鈕時,就開始加載這個fragment:

mainactivity.java的代碼如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

這個代碼比較簡單,就不多解釋了。

現在運作程式,初始界面如下:

Android系列之Fragment(四)----ListFragment的使用

點選左側的按鈕後,顯示如下:

Android系列之Fragment(四)----ListFragment的使用

注:如果想實作:點選中間的某個item,彈出吐司顯示那個item中的内容,可以在上方的articlelistfragment.java中的監聽事件裡添加如下代碼:

(代碼放置的位置是:讓它和fragment的生命周期方法并列就行了)

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

由此我們可以看到,監聽事件的函數為onlistitemclick(),可以直接寫,不需要set。

這裡面關鍵代碼在第05行,通過getitem()接收那個item,然後用字元串來接收。

我們先去掉這部分的監聽事件代碼,繼續往下看。

(4)點選中間listfragment的item,加載右邊的detailfragment:

我們在中間listfragment中添加一個按鈕的監聽事件,監聽事件的函數為onlistitemclick(),articlelistfragment.java在上面代碼的基礎之上,添加的代碼如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

上面的代碼中,我們是在中間的fragment中點選按鈕,然後加載右邊的fragment,然後要注意14至18行的核心代碼,看一下它是如何通過bundle來傳遞資料的。

需要注意的是,第12行代碼必須用replace的方式加載右側的fragment,而不是add;如果用add,運作的錯誤稍後将展示出來。

(5)定義右邊的detailfragment:

先定義布局檔案,在裡面加一個textview,fragment_detail.xml的代碼如下:

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

然後建立檔案,detailfragment.java的代碼如下: 

Android系列之Fragment(四)----ListFragment的使用
Android系列之Fragment(四)----ListFragment的使用

核心代碼是第25行,仔細看一下我們是怎麼通過鍵值對來拿到中間的fragment傳遞過來的item的内容。

現在運作程式,一次點選左邊的按鈕和中間的item,效果如下:

Android系列之Fragment(四)----ListFragment的使用

如果我們在中間的fragment中錯誤地通過add方式加載右邊的fragment,而不是通過replace方式,最終錯誤的效果如下:

Android系列之Fragment(四)----ListFragment的使用

也就是說,每點選一次中間的item,就會在右邊繼續加載一個文本,而不是替代的方式,很顯然,這種方式不是我們想要的。

繼續閱讀