ExpandableListView: 可展开的ListView

ListView 对于Android开发者来说是再熟悉不过的了,不过ListView的功能也有限。当需要展示第二层级数据时,使用ExpandableListView会更方便,下面是两个实例:

(一).
public class MainActivity extends ExpandableListActivity {@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        /*
        这里不用setContentView()去加载布局,因为继承了类ExpandableListActivity。
        如果需要加载自定义布局,则不需继承类ExpandableListActivity,
        而在自定义布局文件里添加ExpandableListView等控件
         */

        //创建主List,用于存放第一层级数据
        List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
        //创建子List,用于存放第二层级数据
        List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();

        //向主List、子List中添加数据
        for (int i = 0; i < 5; i++) {//向主List中添加数据
            Map<String, String> groupMap = new HashMap<String, String>();
            groupMap.put("group", "group " + i);
            groupData.add(groupMap);

            //向子List中添加数据
            List<Map<String, String>> children = new ArrayList<Map<String, String>>();
            for (int j = 0; j < 3; j++) {Map<String, String> childMap = new HashMap<String, String>();
                childMap.put("child", "child " + j);
                children.add(childMap);
            }childData.add(children);
        }//利用SimpleExpandableListAdapter类构建设配器,可类比SimpleAdapter.
        ExpandableListAdapter mAdapter = new SimpleExpandableListAdapter(this,
                groupData,   //第一层级数据
                android.R.layout.simple_expandable_list_item_1,  //第一层级子布局,可自定义
                new String[]{"group"},   //键值
                new int[]{android.R.id.text1},   //第一层级子布局中的显示内容的控件Id
                childData,    //第二层级数据
                android.R.layout.simple_expandable_list_item_2,  //第二层级子布局,可自定义
                new String[]{"child"},    //键值
                new int[]{android.R.id.text1}  //第二层级子布局中的显示内容的控件Id
        );

        setListAdapter(mAdapter);

    }
}

效果图如下:

   
*以上只是简单地显示字符串,当然也可以自定义更复杂的布局,具体可参考SimpleAdapter
(二).
public class MainActivity1 extends Activity {ExpandableListView expandableListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        //与上一个例子不同的是这里加载了自定义布局
        setContentView(R.layout.activity_main);

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

        MyAdapter madapter = new MyAdapter();
        expandableListView.setAdapter(madapter);

    }//自定义一个继承BaseExpandableListAdapter的设配器类,可类比BaseAdapter
    public class MyAdapter extends BaseExpandableListAdapter{TextView textView;
     //groupData为第一层级的数据,childData为第二层级的数据
        public  String [] groupData = {"name 1","name 2","name 3","name 4"};
        public  String [][] childData = {{"number 1_1","number 1_2"},
                {"number 2_1"},
                {"number 3_1","number 3_2","number 3_3"},
                {"number 4_1","number 4_2"}};

        @Override
        public int getGroupCount() {return groupData.length;
        }@Override
        public int getChildrenCount(int groupPosition) {return childData[groupPosition].length;
        }@Override
        public Object getGroup(int groupPosition) {return groupData[groupPosition];
        }@Override
        public Object getChild(int groupPosition, int childPosition) {return childData[groupPosition][childPosition];
        }@Override
        public long getGroupId(int groupPosition) {return 0;
        }@Override
        public long getChildId(int groupPosition, int childPosition) {return 0;
        }@Override
        public boolean hasStableIds() {return true;
        }@Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item,null);
            textView = (TextView) view.findViewById(R.id.textView);
            textView.setText(groupData[groupPosition]);
            return view;
        }@Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_item,null);
            textView = (TextView) view.findViewById(R.id.textView);
            textView.setText(childData[groupPosition][childPosition]);
            return view;
        }@Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {return true;
        }}}

效果图如下:

   
* 以上只是简单地显示字符串,当然也可以自定义更复杂的布局,具体可参考BaseAdapter
**第一次写博客,记录自己所学,若有不足之处,望指出。

Android开发之ExpandableListView: 可展开的ListView相关推荐

  1. Android开发之ExpandableListView

    编辑器加载中...   http://www.cdtarena.com/gpx/201207/4304.html 有时候,使用ListView并不能满足应用程序所需要的功能.有些应用程序需要多组Lis ...

  2. android开发之ExpandableListView的使用,实现类似QQ好友列表

    由于工作需要,今天简单研究了一下ExpandableListView,做了一个类似QQ列表的Demo,和大家分享一下. 效果图如下: 先来看看主布局文件: <RelativeLayout xml ...

  3. Android开发之ExpandableListView可拓展列表和子item左滑结合

    Hello!各位大神好,这是我的第一篇博客,大二学生初学安卓还不到几个月,所以希望不足之处能够多多指教. 在Android开发中,我们经常会遇到点击,展开,可拓展列表的使用,同时可恶的产品经理还要求你 ...

  4. Android开发之旅:HelloWorld项目的目录结构

    引言 前面Android开发之旅:环境搭建及HelloWorld,我们介绍了如何搭建Android开发环境及简单地建立一个HelloWorld项目,本篇将通过HelloWorld项目来介绍Androi ...

  5. Android开发之无bug滑动删除源码(非第三方库)

    Android开发之无bug滑动删除源码(非第三方库源码请在最后面自行下载) 1.我们先来看下效果图:上边是抽取出来的demo,下边是公司用到的项目 2.我们来看下如何调用(我们这里以listView ...

  6. 【原作者:吴秦(Tyler)http://www.cnblogs.com/skynet/archive/2010/04/12/1709892.html】Android开发之旅:环境搭建及HelloWo

    Android开发之旅:环境搭建及HelloWorld 2010-04-12 00:45 by 吴秦, 801360 阅读, 138 评论, 收藏, 编辑 --工欲善其事必先利其器 引言 本系列适合0 ...

  7. Android开发之QQ空间效果(QQ空间下拉图片放大,松手后回弹)

    Android开发之QQ空间效果(QQ空间下拉图片放大,松手后回弹) 腾讯QQ空间的下拉图片放大,松手后回弹的效果带来的视觉差异效果让许多移动开发者心动不已,经本人一段时间的研究,终于实现了该视差效果 ...

  8. android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序   在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity, ...

  9. Android开发之TextView高级应用

    Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大家分享一下TextView的一些使用技巧. A ...

最新文章

  1. WGCNA加权基因共表达网络分析(1)简介、原理
  2. Android线程实例讲解
  3. adaboost mh matlab,Adaboost算法的前世今生
  4. CloudFoundry环境上的三种端口,您分清楚了吗
  5. CRM_UPLOAD_BW
  6. 前端学习(2031)vue之电商管理系统电商系统之创建新分支
  7. html判断整数小数点后两位小数点,js控制input框只能输入数字和一位小数点且小数点后面只有两位小数...
  8. matlab学习:人脸识别之LBP (Local Binary Pattern)
  9. DOTNET零碎要点---1.vb.net利用Oracle.DataAccess.dll链接Oracle数据库
  10. LOJ #6051. 「雅礼集训 2017 Day11」PATH
  11. Linux下browser-sync无法启动Chrome的解决方法
  12. 计算机科学导论数据运算,2-计算机科学导论-数据与运算讲述.ppt
  13. KEmulator与eclipse的集成
  14. ITIL 4知识系列之ITIL4的设计框架解析
  15. Android小白从零开始学Android开发的要点总结(内含福利)
  16. 大学二年级-- “赖”在实验室的发明达人
  17. jmeter-模拟弱网测试
  18. 软考软件设计师下午题目java设计模式(自用)
  19. python程序设计基础之注释
  20. 语言-汉语-官话-中原官话-兖菏片:兖菏片

热门文章

  1. S7300以太网模块作为Modbus从站 实现PLC与其它Modbus 设备的通讯
  2. OpenCV图像拼接器Stitcher 无法使用GPU加速
  3. 群星闪耀时刻:当数据库大师遇见大师,他们会谈论什么?
  4. Halcon 进阶 四 C# 实现 Halcon与迈德威视,视觉解析二维码
  5. cad二次开发-在vs编译软件环境下使用c#语言编写dll文件-新建图层
  6. java仓库库存清单_说仓库库存管理
  7. 卫星授时设备(NTP时钟服务器)应用高速公路监控系统
  8. 有种技艺:有道云笔记不开会员 去除广告大法(屡试不爽)
  9. chrome高级调试技巧总结
  10. 7744问题 C语言