ExpandableListView
是 Android 中的一種列表視圖,它允許用戶展開和折疊每個子項,從而顯示更多的內(nèi)容。ExpandableListView
的子項布局通常包含兩部分:一個用于顯示基本內(nèi)容的布局,另一個用于顯示展開后的額外內(nèi)容(如果有的話)。
以下是一個簡單的 ExpandableListView
子項布局示例:
res/layout
目錄下創(chuàng)建一個新的布局文件,例如 list_item_expandable.xml
。這個文件將定義子項的基本布局和展開后的布局。<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- 基本內(nèi)容布局 -->
<TextView
android:id="@+id/textViewBasic"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="8dp"
android:text="Basic Item" />
<!-- 展開按鈕 -->
<ImageView
android:id="@+id/imageViewExpand"
android:layout_width="48dp"
android:layout_height="wrap_content"
android:src="@drawable/ic_expand_more" />
</LinearLayout>
在這個示例中,我們使用了一個 LinearLayout
作為子項的基本布局,其中包含一個 TextView
用于顯示基本內(nèi)容,以及一個 ImageView
用于顯示展開按鈕。
ExpandableListView
的適配器中,你需要重寫 getView()
方法來返回子項的布局。在這個方法中,你可以根據(jù)當前子項的狀態(tài)(是否展開)來決定顯示哪個布局。@Override
public View getView(int groupPosition, View convertView, ViewGroup parent) {
// 獲取基本內(nèi)容布局和展開按鈕
View basicLayout = convertView;
ImageView expandButton = (ImageView) basicLayout.findViewById(R.id.imageViewExpand);
// 獲取基本內(nèi)容文本
TextView textViewBasic = (TextView) basicLayout.findViewById(R.id.textViewBasic);
String basicText = getItem(groupPosition).getBasicText();
// 根據(jù)子項是否展開來設置布局
if (isItemExpanded(groupPosition)) {
// 如果子項已展開,顯示展開后的布局
basicLayout = inflateExpandedLayout(parent);
textViewBasic.setText(basicText + " (Expanded)");
} else {
// 如果子項未展開,顯示基本布局
basicLayout = inflateBasicLayout(basicLayout);
textViewBasic.setText(basicText);
}
// 設置展開按鈕的點擊事件
expandButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleItemExpansion(groupPosition);
}
});
return basicLayout;
}
在這個示例中,我們首先嘗試使用 convertView
(如果存在)來避免不必要的布局重新創(chuàng)建。然后,我們根據(jù)子項是否展開來決定顯示哪個布局,并更新相應的文本。最后,我們設置了展開按鈕的點擊事件,用于切換子項的展開狀態(tài)。
注意:這個示例僅用于演示目的,實際應用中可能需要根據(jù)具體需求進行調(diào)整。例如,你可能需要處理更復雜的布局結(jié)構(gòu)、動態(tài)加載數(shù)據(jù)等。