在Android中,可以使用BaseExpandableListAdapter来创建可扩展的列表适配器。重写新项覆盖旧项的解决方法如下所示:
public class CustomExpandableListAdapter extends BaseExpandableListAdapter {
// 定义数据源
private List groupList;
private Map> childMap;
// 构造方法
public CustomExpandableListAdapter(List groupList, Map> childMap) {
this.groupList = groupList;
this.childMap = childMap;
}
// 获取组的数量
@Override
public int getGroupCount() {
return groupList.size();
}
// 获取组在指定位置的数据
@Override
public Object getGroup(int groupPosition) {
return groupList.get(groupPosition);
}
// 获取组的ID
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
// 获取指定组的子项数量
@Override
public int getChildrenCount(int groupPosition) {
String group = groupList.get(groupPosition);
return childMap.get(group).size();
}
// 获取子项数据
@Override
public Object getChild(int groupPosition, int childPosition) {
String group = groupList.get(groupPosition);
return childMap.get(group).get(childPosition);
}
// 获取子项ID
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
// 检查是否有稳定的ID
@Override
public boolean hasStableIds() {
return true;
}
// 获取指定位置的组视图
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
// 创建或重用视图
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.group_item_layout, parent, false);
}
// 设置组视图的数据
TextView groupTextView = convertView.findViewById(R.id.groupTextView);
groupTextView.setText((String) getGroup(groupPosition));
return convertView;
}
// 获取指定位置的子项视图
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
// 创建或重用视图
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.child_item_layout, parent, false);
}
// 设置子项视图的数据
TextView childTextView = convertView.findViewById(R.id.childTextView);
childTextView.setText((String) getChild(groupPosition, childPosition));
return convertView;
}
// 检查子项是否可选
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
group_item_layout.xml:
child_item_layout.xml:
public class MainActivity extends AppCompatActivity {
private ExpandableListView expandableListView;
private CustomExpandableListAdapter expandableListAdapter;
private List groupList;
private Map> childMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据源
groupList = new ArrayList<>();