资讯专栏INFORMATION COLUMN

ExpandableListView控件实现二级列表

G9YH / 792人阅读

摘要:效果图如下二级列表附有点击事件。取消安卓二级列表二级菜单一级列表布局是用来自定义打开闭合图标的不自定义也可以,箭头会默认在最左边,建议自己用一个控件来控制上下箭头。

效果图如下:

二级列表附有点击事件。

 

1、布局文件:

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

 1 
 2 
 6 
 7     
12         
22         
30     
31 
32     
33     
37     
38 
39 

2、一级列表布局:

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




    
        
        
    
    

3、二级列表布局:





    
    
    

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

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/3133.html

相关文章

  • Android 的ExpandableListView使用总结--二级展开树结构

    摘要:关于的介绍中文官方其实基本也不用怎么讲,直接看也很清晰是默认支持二级展开树形结构,有的朋友喜欢用嵌套的方式实现多级的展开树,我并不建议那样用,写这篇文章就是单纯的总结一下这个空间,以及满足工作中只是简单的二级展开的需求。 1、关于ExpandableListView的介绍 中文官方api--其实基本也不用怎么讲,直接看api也很清晰http://www.zhdoc.net/androi...

    FingerLiu 评论0 收藏0
  • Android列表,嵌套滑动

    摘要:那些酷炫的开源库整理整理开源库,文章提交,欢迎提交更新二维可拖动面板控件控件可用于房态盘计划表待办事项课程表等相关需要二维视图的场合,需要的可以收藏下五分钟带你看懂嵌套滑动机制在发布之后加入了嵌套滑动机制为嵌套滑动提供了更方便的处理方案。 仿淘宝、京东拖拽商品详情(可嵌套ViewPager、ListView、WebView、FragmentTabhost) 对于电商App,商品详情无疑...

    aboutU 评论0 收藏0
  • 安卓组件控件

    摘要:优点这样做的好处是无需适配,不用担心便宜问题缺点是不同的界面要写不同的基本使用学习记录开车指南之最全实用案例学习整理,很全安卓约束控件扁平化布局入门好棒的干货一个强悍而优美的视频播放器最近项目中有需要用在线视频播放。 ExpandableListView一点点 学习ExpandableListView简单用法 FloatingDragButton:炫酷的拖拽浮动按钮 IOS的Assis...

    tainzhi 评论0 收藏0
  • adjustResize模式下ExpandaleListView中输入框焦点错乱及布局底部的导航栏被

    摘要:第二部分对软键盘的显示和隐藏状态进行监听。这时会出现诸如输入框依旧被键盘遮挡了遮挡的输入框没有焦点而不能输入内容展开和收起分组时自动滚动到焦点所在位置等问题。注意有输入框时,布局尽可能不去复用。  为了更好的用户体验,煎熬了许久,得到这么个解决方案。在此记录下来,以供后来者参考。   第一部分     清单文件中组件activity的android:windowSoftInputMode属性...

    xiangzhihong 评论0 收藏0
  • 图片处理工具 - 收藏集 - 掘金

    摘要:图片预览工具掘金仿微信的图片预览工具这是一个仿朋友圈的列表。加载图片工具使处理发送大图掘金什么是就是内存溢出,即。图片加载框架最详细的使用指南掘金写在前面中有几个比较有名的图片加载框架,和。 Android 图片预览工具 - Android - 掘金仿微信的图片预览工具 01.png 这是一个仿朋友圈的列表。 加载图片工具使... 处理 Android 发送大图 OOM - Andro...

    AbnerMing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<