喜欢显示好友QQ那样的列表,可以展开,可以收起,在android中,以往用的比较多的是listview,虽然可以实现列表的展示,但在某些情况下,我们还是希望用到可以分组并实现收缩的列表,那就要用到android的ExpandableListView,今天研究了一下这个的用法,也参考了很多资料动手写了一个小demo,实现了基本的功能,但界面优化方面做得还不够好,有待改进,素材采用了Q版三国杀武将的图片,很有爱哈哈,下面直接上效果图以及源代码~!

          
        

main.xml的布局很简单啦,只是一个ExpandableListView 就OK了

但值得简单说下的是 android:cacheColorHint="#00000000",这个设置可以去除拖动view时背景变成黑色的效果

android:listSelector="#00000000" ,可以去除选中时的黄色底色

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

 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 3     android:layout_width="fill_parent"

 4     android:layout_height="fill_parent"

 5     android:orientation="vertical" >

 6     <ExpandableListView 

 7         android:id="@+id/list"

 8         android:layout_width="fill_parent"

 9         android:layout_height="fill_parent"

10         android:background="#ffffff"

11         android:cacheColorHint="#00000000"

12         android:listSelector="#00000000" 

13         >

14     </ExpandableListView> 

15 </LinearLayout>  

16

java代码:

package com.eyu.activity_test;



import android.app.Activity;

import android.graphics.Color;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.ExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.ExpandableListView.OnChildClickListener;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;



public class ExpandableList extends Activity{



    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.main);



        final ExpandableListAdapter adapter = new BaseExpandableListAdapter() {

            //设置组视图的图片

            int[] logos = new int[] { R.drawable.wei, R.drawable.shu,R.drawable.wu};

            //设置组视图的显示文字

            private String[] generalsTypes = new String[] { "魏", "蜀", "吴" };

            //子视图显示文字

            private String[][] generals = new String[][] {

                    { "夏侯惇", "甄姬", "许褚", "郭嘉", "司马懿", "杨修" },

                    { "马超", "张飞", "刘备", "诸葛亮", "黄月英", "赵云" },

                    { "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" }



            };

            //子视图图片

            public int[][] generallogos = new int[][] {

                    { R.drawable.xiahoudun, R.drawable.zhenji,

                            R.drawable.xuchu, R.drawable.guojia,

                            R.drawable.simayi, R.drawable.yangxiu },

                    { R.drawable.machao, R.drawable.zhangfei,

                            R.drawable.liubei, R.drawable.zhugeliang,

                            R.drawable.huangyueying, R.drawable.zhaoyun },

                    { R.drawable.lvmeng, R.drawable.luxun, R.drawable.sunquan,

                            R.drawable.zhouyu, R.drawable.sunshangxiang } };

            

            //自己定义一个获得文字信息的方法

            TextView getTextView() {

                AbsListView.LayoutParams lp = new AbsListView.LayoutParams(

                        ViewGroup.LayoutParams.FILL_PARENT, 64);

                TextView textView = new TextView(

                        ExpandableList.this);

                textView.setLayoutParams(lp);

                textView.setGravity(Gravity.CENTER_VERTICAL);

                textView.setPadding(36, 0, 0, 0);

                textView.setTextSize(20);

                textView.setTextColor(Color.BLACK);

                return textView;

            }



            

            //重写ExpandableListAdapter中的各个方法

            @Override

            public int getGroupCount() {

                // TODO Auto-generated method stub

                return generalsTypes.length;

            }



            @Override

            public Object getGroup(int groupPosition) {

                // TODO Auto-generated method stub

                return generalsTypes[groupPosition];

            }



            @Override

            public long getGroupId(int groupPosition) {

                // TODO Auto-generated method stub

                return groupPosition;

            }



            @Override

            public int getChildrenCount(int groupPosition) {

                // TODO Auto-generated method stub

                return generals[groupPosition].length;

            }



            @Override

            public Object getChild(int groupPosition, int childPosition) {

                // TODO Auto-generated method stub

                return generals[groupPosition][childPosition];

            }



            @Override

            public long getChildId(int groupPosition, int childPosition) {

                // TODO Auto-generated method stub

                return childPosition;

            }



            @Override

            public boolean hasStableIds() {

                // TODO Auto-generated method stub

                return true;

            }



            @Override

            public View getGroupView(int groupPosition, boolean isExpanded,

                    View convertView, ViewGroup parent) {

                // TODO Auto-generated method stub

                LinearLayout ll = new LinearLayout(

                        ExpandableList.this);

                ll.setOrientation(0);

                ImageView logo = new ImageView(ExpandableList.this);

                logo.setImageResource(logos[groupPosition]);

                logo.setPadding(50, 0, 0, 0);

                ll.addView(logo);

                TextView textView = getTextView();

                textView.setTextColor(Color.BLACK);

                textView.setText(getGroup(groupPosition).toString());

                ll.addView(textView);



                return ll;

            }



            @Override

            public View getChildView(int groupPosition, int childPosition,

                    boolean isLastChild, View convertView, ViewGroup parent) {

                // TODO Auto-generated method stub

                LinearLayout ll = new LinearLayout(

                        ExpandableList.this);

                ll.setOrientation(0);

                ImageView generallogo = new ImageView(

                        ExpandableList.this);

                generallogo

                        .setImageResource(generallogos[groupPosition][childPosition]);

                ll.addView(generallogo);

                TextView textView = getTextView();

                textView.setText(getChild(groupPosition, childPosition)

                        .toString());

                ll.addView(textView);

                return ll;

            }



            @Override

            public boolean isChildSelectable(int groupPosition,

                    int childPosition) {

                // TODO Auto-generated method stub

                return true;

            }



        };



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

        expandableListView.setAdapter(adapter);

        

        

        //设置item点击的监听器

        expandableListView.setOnChildClickListener(new OnChildClickListener() {



            @Override

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {



                Toast.makeText(

                        ExpandableList.this,

                        "你点击了" + adapter.getChild(groupPosition, childPosition),

                        Toast.LENGTH_SHORT).show();



                return false;

            }

        });

    }

}


关于ExpandableListView的一个小例子的更多相关文章

  1. java连接mysql的一个小例子

    想要用java 连接数据库,需要在classpath中加上jdbc的jar包路径 在eclipse中,Project的properties里面的java build path里面添加引用 连接成功的一 ...

  2. java操作xml的一个小例子

    最近两天公司事比较多,这两天自己主要跟xml打交道,今天更一下用java操作xml的一个小例子. 原来自己操作xml一直用这个包:xstream-1.4.2.jar.然后用注解的方式,很方便,自己只要 ...

  3. MVVM模式的一个小例子

    使用SilverLight.WPF也有很长时间了,但是知道Binding.Command的基本用法,对于原理性的东西,一直没有深究.如果让我自己建一个MVVM模式的项目,感觉还是无从下手,最近写了一个 ...

  4. 使用Trinity拼接以及分析差异表达一个小例子

    使用Trinity拼接以及分析差异表达一个小例子  2017-06-12 09:42:47     293     0     0 Trinity 将测序数据分为许多独立的de Brujin grap ...

  5. 从一个小例子认识SQL游标

    1    什么是游标: 关系数据库中的操作会对整个行集起作用. 例如,由 SELECT 语句返回的行集包括满足该语句的 WHERE 子句中条件的所有行. 这种由语句返回的完整行集称为结果集. 应用程序 ...

  6. 关于SVN配置文件的一个小例子

    1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式 ...

  7. Vue2.x源码学习笔记-从一个小例子查看vm实例生命周期

    学习任何一门框架,都不可能一股脑儿的从入口代码从上到下,把代码看完, 这样其实是很枯燥的,我想也很少有人这么干,或者这么干着干着可能干不下去了. 因为肯定很无聊. 我们先从一个最最简单的小例子,来查看 ...

  8. Spring和Hibernate结合的一个小例子

    1.新建一个SpringHibernate的maven项目 2.pom文件的依赖为 <dependency> <groupId>junit</groupId> &l ...

  9. Spring.Net在ASP.NET Mvc里使用的一个小例子

    就贴个小例子,就不注意格式了. 1.下载dll NuGet的下载地址:http://docs.nuget.org/docs/start-here/installing-nuget 在vs的NuGet里 ...

随机推荐

  1. 2、HZK和FreeType的使用

    HZK16汉字库的使用 定义如下: unsigned char str[]="我" 在运行时str被初始化为2个字节长度,内容为“我”的GBK码,为:0xCE(区码),0xD2(位 ...

  2. 【习题5-1 UVA - 1593】Alignment of Code

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟题,每一列都选最长的那个字符串,然后后面加一个空格就好. 这个作为场宽. 模拟输出就好. [代码] #include <b ...

  3. js+html实现遮罩层效果(收藏哦)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script ty ...

  4. struts2漏洞原理及解决的方法

    1.原理 Struts2的核心是使用的webwork框架,处理 action时通过调用底层的getter/setter方法来处理http的參数,它将每一个http參数声明为一个ONGL(这里是ONGL ...

  5. [Node] Define MongoDB Model with Mongoose

    const mongoose = require('mongoose'); mongoose.Promise = global.Promise; // url friendly const slug ...

  6. Android 实现最新版QQ图像裁剪功能

    这是依据翔神那篇高仿微信图像截取改的  能够先去看  Android 高仿微信头像截取 打造不一样的自己定义控件 这篇文章. 眼下还有个小问题.就是截取成圆形图片之后 会有黑色的边框填充.不知道怎么解 ...

  7. js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)

    js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...

  8. css 控制行数 多出的省略

    <html lang="en"> <head> <meta charset="UTF-8"> <title>Do ...

  9. CSS文本阴影实例

    原文 简书原文:https://www.jianshu.com/p/5abf2fa2f1b9 前言 以下的实例是我从<CSS实战>中看到的实例,当我看到这些实例的时候,发现平时不是很在意的 ...

  10. 12行Python暴力爬《黑豹》豆瓣短评

    作者:黄嘉锋 来源:https://www.jianshu.com/p/ea0b56e3bd86 草长莺飞,转眼间又到了三月"爬虫月".这时往往不少童鞋写论文苦于数据获取艰难,辗转 ...