效果图如下:

二级列表附有点击事件。

1、布局文件:

此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Theme.AppCompat.Light.NoActionBar" 去掉自带的导航。

1 <?xml version="1.0" encoding="utf-8"?>

2

3 android:orientation="vertical"

4 android:layout_width="match_parent"

5 android:layout_height="match_parent">

6

7

8 android:layout_width="match_parent"

9 android:layout_height="@dimen/dimen_55"

10 android:background="@color/main_title"

11 >

12

13 android:layout_centerVertical="true"

14 android:layout_width="wrap_content"

15 android:layout_height="wrap_content"

16 android:text="取消"

17 android:textColor="@color/white"

18 android:textSize="@dimen/dimen_18"

19 android:layout_marginLeft="@dimen/dimen_13"

20 android:onClick="goBack"

21 />

22

23 android:layout_centerVertical="true"

24 android:layout_centerHorizontal="true"

25 android:layout_width="wrap_content"

26 android:layout_height="wrap_content"

27 android:text="安卓二级列表"

28 android:textColor="@color/white"

29 android:textSize="@dimen/dimen_18"/>

30

31

32

33

34 android:id="@+id/expandableListView"

35 android:layout_width="match_parent"

36 android:layout_height="wrap_content">

37

38

39

2、一级列表布局:

ImageView是用来自定义打开闭合图标的(不自定义也可以,箭头会默认在最左边),建议自己用一个ImageView控件来控制上下箭头。图标可以去阿里巴巴矢量图上下载。

android:orientation="horizontal" android:layout_width="match_parent"

android:layout_height="wrap_content">

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:id="@+id/tv_group"

android:layout_width="wrap_content"

android:layout_height="30dp"

android:gravity="center"

android:text="group text"

/>

android:id="@+id/iv_group"

android:layout_alignParentRight="true"

android:layout_centerVertical="true"

android:layout_marginRight="@dimen/dimen_20"

android:layout_width="20dp"

android:layout_height="20dp" />

3、二级列表布局:

android:orientation="horizontal" android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center">

android:id="@+id/iv_child"

android:layout_width="30dp"

android:layout_height="30dp"

android:src="@mipmap/ic_launcher" />

android:id="@+id/tv_child"

android:layout_marginLeft="@dimen/dimen_20"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="item text" />

4、activity代码:

1 private ExpandableListView expandableListView;

2

3 //一级列表数据源

4 private String[] groups = {"软件设计", "数据库技术", "操作系统"};

5 //二级列表数据源

6 private String[][] childs={{"架构设计","面向对象","设计模式","领域驱动设计"},{"SQL Server","Oracle","MySql", "Dameng "},{"Linux","Windows","嵌入式"}};

7

8

9 @Override

10 protected void onCreate(Bundle savedInstanceState) {

11 super.onCreate(savedInstanceState);

12 setContentView(R.layout.activity_expandable_listview);

13

14 initView();

15 }

16 private void initView() {

17 expandableListView = (ExpandableListView)findViewById(R.id.expandableListView);

18 //#TODO 去掉自带箭头,在一级列表中动态添加

19 expandableListView.setGroupIndicator(null);

20 expandableListView.setAdapter(new MyExpandableListView());

21

22 }

23 public void goBack(View view) {

24 finish();

25 }

5、ExpandableListView适配器:

继承自BaseExpandableListAdapter,重写ExpandableListAdapter中的10个方法

1 class MyExpandableListView extends BaseExpandableListAdapter {

2

3 /*一级列表个数*/

4 @Override

5 public int getGroupCount() {

6 return groups.length;

7 }

8

9 /*每个二级列表的个数*/

10 @Override

11 public int getChildrenCount(int groupPosition) {

12 return childs[groupPosition].length;

13 }

14

15 /*一级列表中单个item*/

16 @Override

17 public Object getGroup(int groupPosition) {

18 return groups[groupPosition];

19 }

20

21 /*二级列表中单个item*/

22 @Override

23 public Object getChild(int groupPosition, int childPosition) {

24 return childs[groupPosition][childPosition];

25 }

26

27 @Override

28 public long getGroupId(int groupPosition) {

29 return groupPosition;

30 }

31

32 @Override

33 public long getChildId(int groupPosition, int childPosition) {

34 return childPosition;

35 }

36

37 /*每个item的id是否固定,一般为true*/

38 @Override

39 public boolean hasStableIds() {

40 return true;

41 }

42

43 /*#TODO 填充一级列表

44 * isExpanded 是否已经展开

45 * */

46 @Override

47 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

48 if (convertView == null) {

49 convertView = getLayoutInflater().inflate(R.layout.list_item_expandablelistview,null);

50 }

51 TextView tv_group = (TextView) convertView.findViewById(R.id.tv_group);

52 ImageView iv_group = (ImageView) convertView.findViewById(R.id.iv_group);

53 tv_group.setText(groups[groupPosition]);

54 //控制是否展开图标

55 if (isExpanded) {

56 iv_group.setImageResource(R.drawable.expand_iv_up);

57 } else {

58 iv_group.setImageResource(R.drawable.expand_iv_down);

59 }

60 return convertView;

61 }

62

63 /*#TODO 填充二级列表*/

64 @Override

65 public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

66 if (convertView == null) {

67 convertView = getLayoutInflater().inflate(R.layout.list_item_expandablelistview_child,null);

68 }

69 ImageView image = (ImageView) convertView.findViewById(R.id.iv_child);

70 TextView tv = (TextView) convertView.findViewById(R.id.tv_child);

71 tv.setText(childs[groupPosition][childPosition]);

72 return convertView;

73 }

74

75 /*二级列表中每个能否被选中,如果有点击事件一定要设为true*/

76 @Override

77 public boolean isChildSelectable(int groupPosition, int childPosition) {

78 return true;

79 }

80

81

82 }

到这里基本就完成了,最后再配置一下每个二级列表的点击事件即可:

1 expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {

2 @Override

3 public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {

4 TextView childAt = (TextView)((LinearLayout) v).getChildAt(1);//获得点击列表中TextView的值,需要强转一下,否则找不到getChildAt方法

5 Toast.makeText(ExpandableListViewActivity.this, "点击了 "+childAt.getText()+" 列表", Toast.LENGTH_SHORT).show();

6 return true;

7 }

8 });

android二级列表展开,ExpandableListView控件实现二级列表相关推荐

  1. Android中ExpandableListView控件基本使用

    本文採用一个Demo来展示Android中ExpandableListView控件的使用,如怎样在组/子ListView中绑定数据源.直接上代码例如以下: 程序结构图: layout文件夹下的 mai ...

  2. Android图片控件,跟随列表(recyclerView)的上下滚动而同步平移。

    一个用于放置在RecycleView中的图片控件,其主要功能是跟随列表的上下滚动而上下平移,使得呈现出一种图像相对列表静止的感觉. Overview ScrollingImageView 提供以下特性 ...

  3. android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)

    首先区分一下什么是选项菜单,什么是快捷菜单. 选项菜单是针对整个页面布局的,在这个页面布局的右上方 ,点击之后可以会展开选项,供大家选择. 快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之 ...

  4. SAP UI5 应用开发教程之五十八 - 使用工厂方法在运行时动态创建不同类型的列表行项目控件试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  5. android绘制view的撤销,DrawingView android 上的一个涂鸦控件。可以设置画笔的粗细,颜色,撤销上一笔涂鸦,提供保存图片的接口。 @codeKK Android开源站...

    DrawingView 的原型来自DrawingView-Android,是 android 的一个可涂鸦控件. 之所以做这个控件是因为前段时间写了一个截图应用需要用到涂鸦功能,现在把涂鸦的控件单独拿 ...

  6. Android 根据屏幕尺寸适配控件大小(按比例缩放)

    在写布局时就在想有没有一种方式跟随屏幕大小自动缩放呢? 寻思半天不如上手写个出来 package com.android.juzi.layout;import android.app.Activity ...

  7. android shape 无边框颜色,Android 使用shape定义不同控件的的颜色、背景色、边框色...

    Android 使用shape定义不同控件的的颜色.背景色.边框色 设置按钮的右边框和底边框颜色为红色,边框大小为3dp: 在drawable新建一个 buttonstyle.xml的文件,内容如下: ...

  8. Android ListView Item与子控件焦点问题

    经常会碰到ListView Item和子控件焦点冲突问题,查了很多资料后发现问题出在listview item的父容器布局中 android:descendantFocusability属性和子控件 ...

  9. MFC学习--下拉框、列表、树控件、选项卡

    下拉框.列表.树控件.选项卡 下拉框 属性 代码操作 列表控件 属性 代码操作 树控件 属性 代码操作 选项卡 属性 代码操作 文化建设 下拉框 属性 Data: 下拉可选项,用分号分隔( ; ) T ...

最新文章

  1. 枚举类型enum用法_Java枚举深度解读,看这篇就够了
  2. vivox21升级鸿蒙,vivo X21i相机规格再升级,加持AI成又一拍照神器
  3. Map转xml格式字符串
  4. sqlserver的触发器练习实例
  5. linux每日命令(5):mkdir命令
  6. 半天搭建你的Jenkins持续集成与自动化部署系统
  7. linux ssh-add,linux – 如何使ssh-add从文件读取密码?
  8. mysql 值为0 但却被认为null_MySQL介于普通读和锁定读的加锁方式
  9. CDH Sentry介绍
  10. android sim卡分析,Android 判断SIM卡属于哪个移动运营商详解及实例
  11. 第 19 次 CCF CSP 认证 202006-1 线性分类器(line)
  12. redis LRU和LFU
  13. C# 修改Config文件,增删查改
  14. C语言程序设计(谭浩强第五版)——例题
  15. Servlet是什么
  16. cruzer php sandisk 闪迪u盘量产工具_SanDisk Cruzer Micro(U盘量产工具) V1.0 电脑版
  17. 通过rundll32调用系统对话框
  18. 使用telnet方式管理交换机
  19. Python3实现Two-Pass算法检测区域连通性
  20. 【视频】海康威视摄像头RTSP协议格式

热门文章

  1. 手把手教你研发自己的智能无人机 谢谢您呀!
  2. VS Code为什么能这么牛?
  3. 漫画:进了大厂,都得了哪些病?太形象了!哈哈哈!
  4. Vue组件中的data和props属性
  5. MySQL数据库使用连接更新表中某个字段数据
  6. python爬虫,生成文件速度追不上已经爬取文件的生成速度。
  7. Traceback (most recent call last): File AttributeError: 'NoneType' object has no attribute 'group'
  8. 电影中成千上万的群众演员是怎么来的?
  9. 深度学习中的图像分割:方法和应用
  10. HI3519V101支持的sensor