package com.example.demo;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import java.util.Map;
/**
* 自定义的适配器
*/
public class CustomExpandListAdapter extends BaseExpandableListAdapter {
private final Context context;
private final LayoutInflater layoutInflater;
// 分组数据
private List<Map<String, String>> groupLists;
// 子列表项数据
private List<List<Map<String, String>>> childrenLists;
public CustomExpandListAdapter(Context context, List<Map<String, String>> groupLists, List<List<Map<String, String>>> childrenLists) {
this.context = context;
this.layoutInflater = LayoutInflater.from(context);
this.groupLists = groupLists;
this.childrenLists = childrenLists;
}
/**
* 列表分组的数量
*/
@Override
public int getGroupCount() {
return groupLists.size();
}
/**
* 获取每一个分组下,子列表项的数量
* @param groupPosition 分组下标
*/
@Override
public int getChildrenCount(int groupPosition) {
return childrenLists.get(groupPosition).size();
}
/**
* 获取指定分组下标的对象
* @param groupPosition 分组下标
*/
@Override
public Object getGroup(int groupPosition) {
return groupLists.get(groupPosition);
}
/**
* 获取指定分组下,指定下标的子列表项
* @param groupPosition 分组下标
* @param childPosition 子列表项下标
*/
@Override
public Object getChild(int groupPosition, int childPosition) {
// 这里返回指定分组中的子列表项个数
return childrenLists.get(groupPosition).get(childPosition);
}
/**
* 获取分组ID
* @param groupPosition 分组下标
*/
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
/**
* 获取子列表项ID
* @param groupPosition
* @param childPosition
*/
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
/**
* 这是渲染每一个分组的视图
* @param groupPosition 分组下标
* @param isExpanded 是否展开显示
* @param convertView 当前渲染的视图组件
* @param parent 父容器组件
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder groupViewHolder;
if (null == convertView) {
convertView = layoutInflater.inflate(R.layout.activity_expand_group, null);
groupViewHolder = new GroupViewHolder();
groupViewHolder.groupImageView = convertView.findViewById(R.id.group_icon);
groupViewHolder.groupTitle = convertView.findViewById(R.id.group_title);
groupViewHolder.groupRightText = convertView.findViewById(R.id.group_right_text);
convertView.setTag(groupViewHolder);
} else {
groupViewHolder = (GroupViewHolder) convertView.getTag();
}
// 渲染当前分组项
if (isExpanded) {
// 展开,显示向下箭头
groupViewHolder.groupImageView.setImageResource(R.drawable.arrow_down);
} else {
// 不展开,显示向右箭头
groupViewHolder.groupImageView.setImageResource(R.drawable.arrow_right);
}
Map<String, String> map = groupLists.get(groupPosition);
groupViewHolder.groupTitle.setText(map.get("title"));
groupViewHolder.groupRightText.setText(map.get("rightText"));
return convertView;
}
/**
* 这是渲染某个分组下的子列表项的视图
* @param groupPosition 分组下标
* @param childPosition 子列表项下标
* @param isLastChild 是否最后一个子列表项
* @param convertView 当前渲染的视图组件
* @param parent 父容器组件
*/
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildrenViewHolder childrenViewHolder;
if (null == convertView) {
convertView = layoutInflater.inflate(R.layout.activity_expand_group_item, null);
childrenViewHolder = new ChildrenViewHolder();
childrenViewHolder.childTitle = convertView.findViewById(R.id.child_title);
childrenViewHolder.childStatusText = convertView.findViewById(R.id.child_status_text);
convertView.setTag(childrenViewHolder);
} else {
childrenViewHolder = (ChildrenViewHolder) convertView.getTag();
}
List<Map<String, String>> childs = childrenLists.get(groupPosition);
Map<String, String> childItemMap = childs.get(childPosition);
childrenViewHolder.childTitle.setText(childItemMap.get("title"));
childrenViewHolder.childStatusText.setText(childItemMap.get("status"));
return convertView;
}
/**
* 子列表项是否可以点击
*/
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// 这里一律返回 true,表示子列表项可以响应事件
return true;
}
static class GroupViewHolder {
ImageView groupImageView;
TextView groupTitle;
TextView groupRightText;
}
static class ChildrenViewHolder {
TextView childTitle;
TextView childStatusText;
}
}