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 List<String> groupHeaders;
private List<List<String>> childItems;
public MyExpandableListAdapter(Context context, List<String> groupHeaders, List<List<String>> 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 List<String> groupHeaders;
private List<List<String>> 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<String> childItem1 = new ArrayList<>();
childItem1.add("Child 1.1");
childItem1.add("Child 1.2");
childItems.add(childItem1);
groupHeaders.add("Group 2");
List<String> 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
适配器。你可以根据需要修改数据结构和视图样式。