Android 组件中本身带有 ExpandableListView ,类似qq分组。查看源码可看到
ExpandableListView 继承自listView。所以最重要的适配器也和普通的listView差不多。适配器继承自BaseExpandableListAdapter。
和普通的listView用法一样,继承BaseExpandableListAdapter,重写里面方法。
public ExpandListAdapter1(List<FindAccountByOrgResponse.ChildrenBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public void registerDataSetObserver(DataSetObserver dataSetObserver) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver dataSetObserver) {
}
//分组list大小
@Override
public int getGroupCount() {
return list.size();
}
//分组对应下面的子组list大小
@Override
public int getChildrenCount(int i) {
return list.get(i).users.size();
}
//组对应的item
@Override
public Object getGroup(int i) {
return list.get(i);
}
//分组对应下面的子租的item
@Override
public Object getChild(int i, int i1) {
return list.get(i).users.get(i1);
}
//分组对应的item的id
@Override
public long getGroupId(int i) {
return i;
}
//子组对应的item的id
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return true;
}
//组对应的listview的getview及点击组关闭组或者打开,isExpanded对应组是否打开
@Override
public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupHolder holder = null;
if (convertView == null) {
holder = new GroupHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.item_group_title, null);
holder.title = (TextView) convertView.findViewById(R.id.item_GroupTitle);
holder.isExpand = (ImageView) convertView.findViewById(R.id.itemIsExpand);
convertView.setTag(holder);
} else {
holder = (GroupHolder) convertView.getTag();
}
if (isExpanded) {
holder.isExpand.setImageResource(R.mipmap.openthesymbol2x);
} else {
holder.isExpand.setImageResource(R.mipmap.closethesymbol2x);
}
holder.title.setText(list.get(groupPosition).name);
return convertView;
}
//子组对应listview的getView
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildHolder holder;
if (convertView == null) {
holder = new ChildHolder();
convertView = LayoutInflater.from(context).inflate(
R.layout.item_child, null);
holder.name = (TextView) convertView.findViewById(R.id.childItemTitle);
holder.img = (ImageView) convertView.findViewById(R.id.childItemImg);
convertView.setTag(holder);
} else {
holder = (ChildHolder) convertView.getTag();
}
FindAccountByOrgResponse.ChildrenBean.UsersBean cb = list.get(groupPosition).users.get(childPosition);
holder.name.setText(cb.name);
holder.job.setText("");
Glide.with(context).load(cb.avatar).into(holder.img);
return convertView;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEmpty() {
return false;
}
@Override
public void onGroupExpanded(int i) {
}
@Override
public void onGroupCollapsed(int i) {
}
@Override
public long getCombinedChildId(long l, long l1) {
return 0;
}
@Override
public long getCombinedGroupId(long l) {
return 0;
}
class GroupHolder {
TextView title,more;
ImageView isExpand;
}
class ChildHolder {
TextView name,job;
ImageView img;
}
}
在添加适配器的时候比listView多一条,
expandableListView1.setGroupIndicator(null);
是否选择默认的组的打开或关闭的指示器,就是组前面的箭头,可以自定义