Android中ExpandableListView的使用

ExpandableListView是Android中可以实现下拉list的一个控件,具体的实现方法如下:

首先:在layout的xml文件中定义一个ExpandableListView

view plaincopy to clipboardprint?
  1. <LinearLayout
  2. android:id="@+id/linearLayout"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. androidrientation="vertical"
  6. >
  7. <ExpandableListView
  8. android:id="@+id/expandableListView"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. />
  12. </LinearLayout>

定义两个List,用来存放控件中Group/Child中的String

view plaincopy to clipboardprint?
  1. private List<String> groupArray;
  2. private List<List<String>> childArray;

对这两个List进行初始化,并插入一些数据

view plaincopy to clipboardprint?
  1. groupArray = new ArrayList<String>();
  2. childArray = new ArrayList<List<String>>();
  3. groupArray.add("第一行");
  4. groupArray.add("第二行");
  5. List<String> tempArray = new ArrayList<String>();
  6. tempArray.add("第一条");
  7. tempArray.add("第二条");
  8. tempArray.add("第三条");
  9. for(int index = 0; index <groupArray.size(); ++index)
  10. {
  11. childArray.add(tempArray);
  12. }

定义ExpandableListView的Adapter

view plaincopy to clipboardprint?
  1. //ExpandableListView的Adapter
  2. public class ExpandableAdapter extends BaseExpandableListAdapter
  3. {
  4. Activity activity;
  5. public ExpandableAdapter(Activity a)
  6. {
  7. activity = a;
  8. }
  9. public Object getChild(int groupPosition, int childPosition)
  10. {
  11. return childArray.get(groupPosition).get(childPosition);
  12. }
  13. public long getChildId(int groupPosition, int childPosition)
  14. {
  15. return childPosition;
  16. }
  17. public int getChildrenCount(int groupPosition)
  18. {
  19. return childArray.get(groupPosition).size();
  20. }
  21. public View getChildView(int groupPosition, int childPosition,
  22. boolean isLastChild, View convertView, ViewGroup parent)
  23. {
  24. String string = childArray.get(groupPosition).get(childPosition);
  25. return getGenericView(string);
  26. }
  27. // group method stub
  28. public Object getGroup(int groupPosition)
  29. {
  30. return groupArray.get(groupPosition);
  31. }
  32. public int getGroupCount()
  33. {
  34. return groupArray.size();
  35. }
  36. public long getGroupId(int groupPosition)
  37. {
  38. return groupPosition;
  39. }
  40. public View getGroupView(int groupPosition, boolean isExpanded,
  41. View convertView, ViewGroup parent)
  42. {
  43. String string = groupArray.get(groupPosition);
  44. return getGenericView(string);
  45. }
  46. // View stub to create Group/Children 's View
  47. public TextView getGenericView(String string)
  48. {
  49. // Layout parameters for the ExpandableListView
  50. AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
  51. ViewGroup.LayoutParams.FILL_PARENT, 64);
  52. TextView text = new TextView(activity);
  53. text.setLayoutParams(layoutParams);
  54. // Center the text vertically
  55. text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
  56. // Set the text starting position
  57. text.setPadding(36, 0, 0, 0);
  58. text.setText(string);
  59. return text;
  60. }
  61. public boolean hasStableIds()
  62. {
  63. return false;
  64. }
  65. public boolean isChildSelectable(int groupPosition, int childPosition)
  66. {
  67. return true;
  68. }
  69. }

最后,给定义好的ExpandableListView添加上Adapter

view plaincopy to clipboardprint?
  1. ExpandableListView expandableListView = (ExpandableListView)findViewById(R.id.expandableListView);
  2. expandableListView.setAdapter(new ExpandableAdapter(Main.this));

运行即可见效果~~~

----------------------------------------------------------------------------------------------------------------

Android版手风琴(ExpandableListView)

先看效果,过瘾一番。

源码下载:http://files.cnblogs.com/salam/WidgetDemo.rar

  ExpandableListView是Android中的手风琴,本人感觉效果相当棒。

  一、ExpandableListView介绍

    一个垂直滚动的显示两个级别(Child,Group)列表项的视图,列表项来自ExpandableListAdapter 。组可以单独展开。

  1.重要方法

      expandGroup(int groupPos) :在分组列表视图中展开一组,

      setSelectedGroup(int groupPosition) :设置选择指定的组。

      setSelectedChild(int groupPosition, int childPosition, boolean shouldExpandGroup) :设置选择指定的子项。

      getPackedPositionGroup(long packedPosition) :返回所选择的组

      getPackedPositionForChild(int groupPosition, int childPosition) :返回所选择的子项

      getPackedPositionType(long packedPosition) :返回所选择项的类型(Child,Group)

      isGroupExpanded(int groupPosition) :判断此组是否展开

  2.代码:

ExpandableListContextMenuInfo menuInfo=(ExpandableListContextMenuInfo)item.getMenuInfo();
  String title=((TextView)menuInfo.targetView).getText().toString();
  int type=ExpandableListView.getPackedPositionType(menuInfo.packedPosition);
  
  if (type==ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
  int groupPos =ExpandableListView.getPackedPositionGroup(menuInfo.packedPosition);
  int childPos =ExpandableListView.getPackedPositionChild(menuInfo.packedPosition);

二、ExpandableListAdapter

    一个接口,将基础数据链接到一个ExpandableListView。此接口的实施将提供访问Child的数据(由组分类),并实例化的Child和Group。

  1.重要方法

    getChildId(int groupPosition, int childPosition) 获取与在给定组给予孩子相关的数据。

    getChildrenCount(int groupPosition) 返回在指定Group的Child数目。

  2.代码

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
         // Sample data set.  children[i] contains the children (String[]) for groups[i].
         public String[] groups = { "我的好友", "新疆同学", "亲戚", "同事" };
         public String[][] children = {
                 { "胡算林", "张俊峰", "王志军", "二人" },
                 { "李秀婷", "蔡乔", "别高", "余音" },
                 { "摊派新", "张爱明" },
                 { "马超", "司道光" }
         };
        
         public Object getChild(int groupPosition, int childPosition) {
             return children[groupPosition][childPosition];
         }

public long getChildId(int groupPosition, int childPosition) {
             return childPosition;
         }

public int getChildrenCount(int groupPosition) {
             return children[groupPosition].length;
         }

public TextView getGenericView() {
             // Layout parameters for the ExpandableListView
             AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                     ViewGroup.LayoutParams.MATCH_PARENT, 64);

TextView textView = new TextView(ExpandableListDemo.this);
             textView.setLayoutParams(lp);
             // Center the text vertically
             textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
             // Set the text starting position
             textView.setPadding(36, 0, 0, 0);
             return textView;
         }
        
         public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
                 View convertView, ViewGroup parent) {
             TextView textView = getGenericView();
             textView.setText(getChild(groupPosition, childPosition).toString());
             return textView;
         }

public Object getGroup(int groupPosition) {
             return groups[groupPosition];
         }

public int getGroupCount() {
             return groups.length;
         }

public long getGroupId(int groupPosition) {
             return groupPosition;
         }

public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
                 ViewGroup parent) {
             TextView textView = getGenericView();
             textView.setText(getGroup(groupPosition).toString());
             return textView;
         }

public boolean isChildSelectable(int groupPosition, int childPosition) {
             return true;
         }

public boolean hasStableIds() {
             return true;
         }

}

Android中ExpandableListView的使用相关推荐

  1. Android中ExpandableListView控件基本使用

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

  2. Android中ExpandableListView中嵌套ListView

    最近项目挺紧张,一直没有时间总结学习,今天把最近遇到的一个奇葩的设计,做一下总结.其他的好多的APP中做的通讯录都类似微信通讯录这样,但是有这样一个需求的设计. 就是分为两个组,第一个组不需要A-Z的 ...

  3. Android中ExpandableListView控件的用法详解

    <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widge ...

  4. Android中ExpandableListView子项单击事件没有响应

    前言 此问题多半是加入了Button等可以接收单击事件和可以接收焦点的控件导致. ExpandableListView控件的单击事件的要求大多数大神都已经说过了 1.BaseExpandableLis ...

  5. Android之ExpandableListView

    ExpandableListView可以用来表现多层级的listView,本文主要是ExpandableListView的一个简单实现 布局文件 <LinearLayout xmlns:andr ...

  6. Android微信通讯录界面代码,Android中使用Expandablelistview实现微信通讯录界面

    之前的博文<Android 中使用ExpandableListView 实现分组的实例>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的 ...

  7. Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)

    之前的博文<Android中使用ExpandableListView实现好友分组>我简单介绍了使用ExpandableListView实现简单的好友分组功能,今天我们针对之前的所做的仿微信 ...

  8. Android中使用ExpandableListView实现好友分组

    一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源 ...

  9. android list 分组,Android 中使用ExpandableListView 实现分组的实例

    Android 中使用ExpandableListView 实现分组 一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给 ...

最新文章

  1. Scala编程之闭包(closure)
  2. HDU 6354 Everything Has Changed(余弦定理)多校题解
  3. typeof做类型判断时容易犯下的错
  4. 用 Python脚本生成 Android SALT 扰码
  5. iOS开发(3)UIButton
  6. 隐式调用 Intent 大全
  7. 外网服务器搭建网站并获取域名教程
  8. 解决:Could not find metadata org.apache.maven.plugins:maven-archetype-plugin/maven-metadata.xml in loc
  9. 执行点击事件,第一次点击后,一切正常,第二次点击,执行两次,以此类推
  10. 解决SecureCRT登陆Linux显示中文乱码
  11. Office文档在线预览/在线编辑解决方案 - 毕升OfficeAPI说明
  12. java print int_java – 在printin输入int
  13. 一个成功的Jsp程序员该怎样学习JSP呢?
  14. ArcMAP 使用绘图工具添加注记
  15. Ubuntu 安装 gcc-4.9.3-64-gnu
  16. NanoHTTPD 获取请求ip
  17. Web基础配置篇(四): Mysql的配置及使用
  18. 在上海社保千万不要断,如果断了,一定要这样做!
  19. 拳皇FANS们不得不看的动画
  20. 浅析部分物化以及冰山立方体的计算方法Star-Cubing

热门文章

  1. github报错“remote: Support for password authentication was removed on August 13, 2021. Please use a p”
  2. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )
  3. 【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )
  4. html字符实体和实体名称 lt;
  5. redis as session_handler
  6. bzoj 3223: Tyvj 1729 文艺平衡树
  7. 手机数据抓包以及wireshark技巧
  8. C#程序员干货系列之语音识别
  9. Vs2005 正在更新 IntelliSense无法通过的解决办法
  10. LIbGDX 示例Tests详解一:AccelerometerTest