歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android開發之ExpandableListView

有時候,使用ListView並不能滿足應用程序所需要的功能。有些應用程序需要多組ListView,這時候我們就要使用一種新的控件ExpandableListView——可以擴展的ListView。它的作用就是將ListView進行分組。就好像我們使用QQ的時候,有“我的好友”,“陌生人”,“黑名單”一樣,點擊一下會擴展開,再點擊一下又會收縮回去。

ExpandableListView是一個垂直滾動顯示兩級列表項的視圖,與ListView不同的是,它可以有兩層:每一層都能夠被獨立的展開並顯示其子項。這些子項來自於與該視圖關聯的ExpandableListAdapter。

每一個可以擴展的列表項的旁邊都有一個指示符(箭頭)用來說明該列表項目前的狀態(這些狀態一般是已經擴展開的列表項,還沒有擴展開的列表項,子列表項和最後一個子列表項)。可以使用方法:setChildIndicator(Drawable),setGroupIndicator(Drawable)(或者相應的XML文件的屬性) 去設置這些指示符的樣式。當然也可以使用默認的指示符。布Android.R.layout.simple_expandable_list_item_1,android.R.layout.simple_expandable_list_item_2

和ListView一樣,ExpandableListView也是一個需要Adapter作為橋梁來取得數據的控件。一般適用於ExpandableListView的Adapter都要繼承BaseExpandableListAdapter這個類,並且必須重載getGroupView和getChildView這兩個最為重要的方法。

BaseExpandableListAdapter的主要重載方法如下:

public abstract ObjectgetChild (int groupPosition, int childPosition)

取得與指定分組、指定子項目關聯的數據.

參數

groupPosition 包含子視圖的分組的位置.

childPosition   指定的分組中的子視圖的位置.

返回

與子視圖關聯的數據.

public abstract long getChildId (int groupPosition, intchildPosition)

取得給定分組中給定子視圖的ID. 該組ID必須在組中是唯一的.必須不同於其他所有ID(分組及子項目的ID).

參數

groupPosition 包含子視圖的分組的位置.

childPosition   要取得ID的指定的分組中的子視圖的位置.

返回

與子視圖關聯的ID.

public abstract View getChildView (int groupPosition, intchildPosition, boolean isLastChild, View convertView, ViewGroup parent)

取得顯示給定分組給定子位置的數據用的視圖.

參數

groupPosition 包含要取得子視圖的分組位置.

childPosition   分組中子視圖(要返回的視圖)的位置.

isLastChild     該視圖是否為組中的最後一個視圖.

convertView   如果可能,重用舊的視圖對象.使用前你應該保證視圖對象為非空,並且是否是合適的類型.如果該對象不能轉換為可以正確顯示數據的視圖,該方法就創建新視圖.不保證使用先前由 getChildView(int, int,boolean, View, ViewGroup)創建的視圖.

parent     該視圖最終從屬的父視圖.

返回

指定位置相應的子視圖.

public abstract int getChildrenCount (int groupPosition)

取得指定分組的子元素數.

參數

groupPosition 要取得子元素個數的分組位置.

返回

指定分組的子元素個數.

public abstract long getCombinedChildId (long groupId, long childId)

取得一覽中可以唯一識別子條目的 ID(包括分組ID和子條目ID).可擴展列表要求每個條目 (分組條目和子條目)具有一個可以唯一識別列表中子條目和分組條目的ID. 該方法根據給定子條目ID和分組條目ID返回唯一識別ID.另外,如果 hasStableIds() 為真,該函數返回的ID必須是固定不變的.

參數

groupId   包含子條目ID的分組條目ID.

childId    子條目的ID.

返回

可以在所有分組條目和子條目中唯一識別該子條目的ID(可能是固定不變的).

public abstract long getCombinedGroupId (long groupId)

取得一覽中可以唯一識別子條目的 ID(包括分組ID和子條目ID).可擴展列表要求每個條目 (分組條目和子條目)具有一個可以唯一識別列表中子條目和分組條目的ID. 該方法根據給定子條目ID和分組條目ID返回唯一識別ID.另外,如果 hasStableIds() 為真,該函數返回的ID必須是固定不變的.

參數

groupId   分組條目ID.

返回

可以在所有分組條目和子條目中唯一識別該分組條目的ID(可能是固定不變的).

public abstract Object getGroup (int groupPosition)

取得與給定分組關聯的數據.

參數

groupPosition 分組的位置.

返回

指定分組的數據.

public abstract int getGroupCount ()

取得分組數.

返回

分組數.

public abstract long getGroupId (int groupPosition)

取得指定分組的ID.該組ID必須在組中是唯一的.必須不同於其他所有ID(分組及子項目的ID).

參數

groupPosition 要取得ID的分組位置.

返回

與分組關聯的ID.

public abstract View getGroupView (int groupPosition, booleanisExpanded, View convertView, ViewGroup parent)

取得用於顯示給定分組的視圖. 這個方法僅返回分組的視圖對象, 要想獲取子元素的視圖對象,就需要調用 getChildView(int, int, boolean, View, ViewGroup).

參數

groupPosition 決定返回哪個視圖的組位置 .

isExpanded     該組是展開狀態還是收起狀態 .

convertView   如果可能,重用舊的視圖對象.使用前你應該保證視圖對象為非空,並且是否是合適的類型.如果該對象不能轉換為可以正確顯示數據的視圖,該方法就創建新視圖.不保證使用先前由 getGroupView(int, boolean,View, ViewGroup)創建的視圖.

parent     該視圖最終從屬的父視圖.

返回

指定位置相應的組視圖.

public abstract boolean hasStableIds ()

是否指定分組視圖及其子視圖的ID對應的後台數據改變也會保持該ID.

返回

是否相同的ID總是指向同一個對象.

public abstract boolean isChildSelectable (int groupPosition, intchildPosition)

指定位置的子視圖是否可選擇.

Copyright © Linux教程網 All Rights Reserved