Android 开发学习进程0.31 二级列表 ExpandableListView使用相关
发布日期:2021-05-09 00:48:53 浏览次数:17 分类:精选文章

本文共 3546 字,大约阅读时间需要 11 分钟。

二级列表ExpandableListView

Android二级列表有许多实现方式,如两个recyclerview嵌套,如想要简单实用子列表展开收缩的功能使用expandablelistview较为简单。

  1. activity中的初始化expandablelistview
expandAdapter = new ActLinExamExpandAdapter(this, mlList);        expandListView.setAdapter(expandAdapter);        expandListView.setDivider(null);        expandListView.setGroupIndicator(null);

adapter继承了baseExpandableListView ,其中的内容下面再讲,setDivider方法是设置分割线,设计途中不需要就可以直接设置为空,setGroupIndicator方法设置指示器,也就是展开子列表的标志,默认是一个小三角,也可以直接设置为空,同时布局文件设置了 android:scrollbars="none" 设置滚动条为空。在数据变化后使用 expandAdapter.notifyDataSetChanged();更改列表数据。

2. adapter的使用方法
这里只贴出一些主要代码和简单使用需要重写的方法,初始化方法是传context和需要的数据。
getGroupCont方法是父列表的长度,需要传外层数据数量,同理getChildrenCount方法返回父列表中的子列表数量。
下面是重点需要重写的方法,首先自定义viewholder类,构造方法是父布局和子布局的convertView,在其中添加定义布局中的组件,分别在getGroupView 和getChildView中初始化,注意这两个方法是会多次使用,同时convertview也可能会被复用。可以在此再定义recyclerview实现三级列表效果。同时需要修改isChildSelectable方法返回值为true,否则子项点击事件会不起作用。

@Override    public int getGroupCount() {        return beanList == null ? 0 : beanList.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return beanList.get(groupPosition).getShuju() == null ? 0 :                beanList.get(groupPosition).getShuju().size();    }    @Override    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        ViewHoldParent viewHoldParent;        if (convertView == null) {            convertView = View.inflate(parent.getContext(),R.layout.item_actlinexam_expandlist, null);            viewHoldParent = new ViewHoldParent(convertView);            convertView.setTag(viewHoldParent);        } else {            viewHoldParent = (ViewHoldParent) convertView.getTag();        }        viewHoldParent.tvMonth.setText(String.valueOf(beanList.get(groupPosition).getM()));        return convertView;    } @Override    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {        ViewHoldChildren viewHoldChildren;        if (convertView == null) {            convertView = View.inflate(parent.getContext(),R.layout.item_actlinexam_expandchild, null);            viewHoldChildren = new ViewHoldChildren(convertView);            convertView.setTag(viewHoldChildren);        } else {            viewHoldChildren = (ViewHoldChildren) convertView.getTag();        }        return convertView;    } @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }    public static class ViewHoldParent {        private final TextView tvMonth, tvYear;        public ViewHoldParent(View itemView) {            tvYear = itemView.findViewById(R.id.tv_item_actlinexam_expand_year);        }    }    public static class ViewHoldChildren {        private final TextView tvTitle, tvLaber;        public ViewHoldChildren(View itemView) {            tvTitle = itemView.findViewById(R.id.tv_actlinexam_expandchild_title);        }    }
  1. 其他问题
    自定义控件监听事件点击展开收缩方法有
if (expandListView.isGroupExpanded(position)) {                    expandListView.collapseGroup(position);                } else {                    expandListView.expandGroup(position);                }

子项点击问题,子项的某一控件可能会与父布局争夺焦点使得点击失效 ,此时可以使用 android:descendantFocusability="blocksDescendants"方法在子布局的根布局下。

android:descendantFocusability属性如下:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
如果在此需要同时设置子项点击和子项其中的一个控件如imageview的点击,这里建议重写imageview的点击事件,并在adapter中写接口暴漏在activity或fragment中使用。

上一篇:前端规范之路
下一篇:Android 开发学习进程0.30 builder模式创建popwindow

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年05月01日 14时01分39秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

10个运维拿来就用的 Shell 脚本,用了才知道有多爽,零基础入门到精通,收藏这一篇就够了 2025-03-29
10款最佳免费WiFi黑客工具(附传送门)零基础入门到精通,收藏这一篇就够了 2025-03-29
15个备受欢迎的嵌入式GUI库,从零基础到精通,收藏这篇就够了! 2025-03-29
15个程序员常逛的宝藏网站!!从零基础到精通,收藏这篇就够了! 2025-03-29
2023最新版Node.js下载安装及环境配置教程(非常详细)从零基础入门到精通,看完这一篇就够了 2025-03-29
2024大模型行业应用十大典范案例集(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2024年全球顶尖杀毒软件,从零基础到精通,收藏这篇就够了! 2025-03-29
2024年度“金智奖”揭晓:绿盟科技获双项大奖,创新驱动网络安全新高度。从零基础到精通,收藏这篇就够了! 2025-03-29
2024年最流行的十大开源渗透测试工具 2025-03-29
2024年非科班的人合适转行做程序员吗? 2025-03-29
2024数字安全创新性案例报告,从零基础到精通,收藏这篇就够了! 2025-03-29
2024最火专业解读:信息安全(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-29
2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新一文彻底搞懂大模型 - Agent(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新关于HW护网行动的一些知识,零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-30
2025版最新大模型微调方法(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新小白学习大模型:什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新常用黑客工具之【Nmap 教程基础】零基础入门到精通,收藏这篇就够了 2025-03-30
2025版最新渗透测试和黑客工具列表,零基础入门到精通,收藏这一篇就够了 2025-03-30