ExpandableListView
是 Android 中的一种列表视图,它允许用户展开和折叠每个子项,从而显示更多的内容。ExpandableListView
的子项布局通常包含两部分:一个用于显示基本内容的布局,另一个用于显示展开后的额外内容(如果有的话)。
以下是一个简单的 ExpandableListView
子项布局示例:
res/layout
目录下创建一个新的布局文件,例如 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">
<!-- 基本内容布局 -->
<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
用于显示基本内容,以及一个 ImageView
用于显示展开按钮。
ExpandableListView
的适配器中,你需要重写 getView()
方法来返回子项的布局。在这个方法中,你可以根据当前子项的状态(是否展开)来决定显示哪个布局。@Override
public View getView(int groupPosition, View convertView, ViewGroup parent) {
// 获取基本内容布局和展开按钮
View basicLayout = convertView;
ImageView expandButton = (ImageView) basicLayout.findViewById(R.id.imageViewExpand);
// 获取基本内容文本
TextView textViewBasic = (TextView) basicLayout.findViewById(R.id.textViewBasic);
String basicText = getItem(groupPosition).getBasicText();
// 根据子项是否展开来设置布局
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
(如果存在)来避免不必要的布局重新创建。然后,我们根据子项是否展开来决定显示哪个布局,并更新相应的文本。最后,我们设置了展开按钮的点击事件,用于切换子项的展开状态。
注意:这个示例仅用于演示目的,实际应用中可能需要根据具体需求进行调整。例如,你可能需要处理更复杂的布局结构、动态加载数据等。