android 仿qq分组

来源:互联网 发布:caffe的数据层 编辑:程序博客网 时间:2024/04/30 07:10

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);

是否选择默认的组的打开或关闭的指示器,就是组前面的箭头,可以自定义

0 0