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

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

  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

  1. private  List<String> groupArray;
  2. private  List<List<String>> childArray;

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

  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

  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

  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,每次只展示一个分组

    // 只允许打开一个分组 expandListView.setOnGroupExpandListener(new OnGroupExpandListener() { @Override public ...

  3. Android之ExpandableListView

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

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

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

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

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

  6. android中与Adapter相关的控件----ExpandableListView

    ExpandableListView(可折叠的列表) 一.ExpandableListView(可折叠的列表)和ListView有很多地方差不多的,使用也差不多,只是他们使用适配器不一样的,Expan ...

  7. Android 中常见控件的介绍和使用

    1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.la ...

  8. 22.Android之ExpandableListView树形列表学习

    Android经常用到树形菜单,一般ExpandableListView可以满足这个需要,今天学习下. XML代码: <?xml version="1.0" encoding ...

  9. Android 之 ExpandableListView 的使用

    喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到an ...

随机推荐

  1. VBA续嘘嘘

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  2. MySQL主从同步报错排错结果及修复过程之:Slave_SQL_Running: No

    起因调查: 收到大量邮件报警想必事出有因,就问同事到底发生了什么?同事登录从库查看,发现出现如下报错提示,表示与主库同步失败,一直卡在哪里,看他弄了两个多小时,问题越来越多,解决一个恢复平静了一两分钟 ...

  3. angular初步认识一

    最近比较流行MVC前端框架开发,最近研究了一个框架AngularJS框架 不说那么多,先上例子,我是个代码控 <!DOCTYPE html> <html lang="en& ...

  4. sqlmap的学习以及使用

    PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范 将复杂查询写到SQL配置文件--SOD框架的SQL-MAP技术简介 PDF.NET数据开发框架 之SQL-MAP使用存储过程 不懂还 ...

  5. 011-Scala中的apply实战详解

    011-Scala中的apply实战详解 object中的apply方法 class中的apply方法 使用方法 apply方法可以应用在类或者Object对象中 class类 必须要创建实例化的类对 ...

  6. Java在JFinal中出现Can not create instance of class: com.keesail.web.config.WebConfig异常处理方式

    编译的时候一直出现如下问题: 后面 查了许多资料 说是build项目的时候web.xml没有输出到class目录.后面试了很多方式不行.后面自己摸索出如下方式解决问题: 改成默认输出目录.

  7. Spark MLlib Data Type

    MLlib 支持存放在单机上的本地向量和矩阵,也支持通过多个RDD实现的分布式矩阵.因此MLlib的数据类型主要分为两大类:一个是本地单机向量:另一个是分布式矩阵.下面分别介绍一下这两大类都有哪些类型 ...

  8. [SHELL]判断一个命令是否存在

    首先要说明的是,不要使用which来进行判断,理由如下: 1.which非SHELL的内置命令,用起来比内置命令的开销大,并且非内置命令会依赖平台的实现,不同平台的实现可能不同. # type typ ...

  9. Gnu C的不同于标准C的语法

    2. ,## 是与逗号合在一起用的, 表示后面有变量,则显示逗号,若后面无变量,则不显示逗号, 这种情况适用于用宏替换可变参数的函数,调用的时候可能传一个参数,或传两个参数, 这种打印语句在平台上,函 ...

  10. 本地测试AJAX请求

    要在本地测试AJAX,首先是环境的搭建,因为XHR对象的open方法中参数url是指文件在服务器上的文件.下面以WampServer为例. 1. 下载wamp的安装包,下载地址为:http://221 ...