ExpandableListView
的适配器需要继承自 BaseAdapter
,并重写其中的方法。以下是一个简单的示例:
首先,创建一个自定义的 ExpandableListAdapter
类:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; public class MyExpandableListAdapter extends BaseAdapter { private Context context; private ListgroupHeaders; private List > childItems; public MyExpandableListAdapter(Context context, List
groupHeaders, List > childItems) { this.context = context; this.groupHeaders = groupHeaders; this.childItems = childItems; } @Override public int getCount() { // 返回数据的总行数,包括分组和子项 return groupHeaders.size() + childItems.size(); } @Override public Object getItem(int position) { // 返回指定位置的数据项 if (position < groupHeaders.size()) { return groupHeaders.get(position); } else { return childItems.get(position - groupHeaders.size()); } } @Override public long getItemId(int position) { // 返回指定位置的 ID,通常可以使用 position 作为 ID return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 返回指定位置的视图 if (position < groupHeaders.size()) { // 如果是分组标题,则使用 groupHeaders 中的数据 TextView textView = (TextView) convertView; if (convertView == null) { textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false); } textView.setText(groupHeaders.get(position)); return textView; } else { // 如果是子项,则使用 childItems 中的数据 TextView textView = (TextView) convertView; if (convertView == null) { textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false); } textView.setText(childItems.get(position - groupHeaders.size()).get(0)); return textView; } } @Override public int getGroupCount() { // 返回分组的数量 return groupHeaders.size(); } @Override public int getGroupView(int groupPosition, View convertView, ViewGroup parent) { // 返回分组标题的视图 TextView textView = (TextView) convertView; if (convertView == null) { textView = (TextView) LayoutInflater.from(context).inflate(android.R.layout.simple_list_item_1, parent, false); } textView.setText(groupHeaders.get(groupPosition)); return textView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // 返回子项是否可选中,通常设置为 true return true; } }
接下来,在你的 Activity
或 Fragment
中设置适配器:
import android.os.Bundle; import android.widget.ExpandableListView; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ExpandableListView expandableListView; private MyExpandableListAdapter adapter; private ListgroupHeaders; private List > childItems; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); expandableListView = findViewById(R.id.expandableListView); // 准备数据 groupHeaders = new ArrayList<>(); childItems = new ArrayList<>(); groupHeaders.add("Group 1"); List
childItem1 = new ArrayList<>(); childItem1.add("Child 1.1"); childItem1.add("Child 1.2"); childItems.add(childItem1); groupHeaders.add("Group 2"); List childItem2 = new ArrayList<>(); childItem2.add("Child 2.1"); childItem2.add("Child 2.2"); childItems.add(childItem2); // 设置适配器 adapter = new MyExpandableListAdapter(this, groupHeaders, childItems); expandableListView.setAdapter(adapter); } }
这样,你就创建了一个简单的 ExpandableListView
适配器。你可以根据需要修改数据结构和视图样式。