android ExpandableListView详解

ExpandableListView是android中可以实现下拉list的一个控件,是一个垂直滚动的心事两个级别列表项手风琴试图,列表项是来自ExpandableListViewaAdapter,组可以单独展开。

重要方法:

 1 expandGroup (int groupPos) ;//在分组列表视图中 展开一组,
 2 setSelectedGroup (int groupPosition) ;//设置选择指定的组。
 3
 4 setSelectedChild (int groupPosition, int childPosition, boolean shouldExpandGroup);//设置选择指定的子项。
 5
 6 getPackedPositionGroup (long packedPosition);//返回所选择的组
 7
 8 getPackedPositionForChild (int groupPosition, int childPosition) ;//返回所选择的子项
 9
10 getPackedPositionType (long packedPosition);//返回所选择项的类型(Child,Group)
11
12 isGroupExpanded (int groupPosition);//判断此组是否展开

expandableListView.setDivider();这个是设定每个Group之间的分割线。

expandableListView.setGroupIndicator();这个是设定每个Group之前的那个图标。

expandableListView.collapseGroup(int group); 将第group组收起

ExpandableListAdapter

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

1.重要方法

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

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

案例:

首先定义个一个布局文件expandablelistview.xml

 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/expandableListView"
 8         android:layout_width ="fill_parent"
 9         android:layout_height ="wrap_content"
10         >
11      </ExpandableListView>
12 </LinearLayout>
  1 package com.test;
  2
  3 import java.util.ArrayList;
  4 import java.util.List;
  5
  6 import javax.security.auth.PrivateCredentialPermission;
  7
  8 import android.app.Activity;
  9 import android.os.Bundle;
 10 import android.view.Gravity;
 11 import android.view.View;
 12 import android.view.ViewGroup;
 13 import android.view.Window;
 14 import android.widget.AbsListView;
 15 import android.widget.BaseExpandableListAdapter;
 16 import android.widget.ExpandableListView;
 17 import android.widget.TextView;
 18
 19 public class ExpandableListViewDemo extends Activity {
 20     /** Called when the activity is first created. */
 21
 22     //定义两个List用来控制Group和Child中的String;
 23
 24     private  List<String>  groupArray;//组列表
 25     private  List<List<String>> childArray;//子列表
 26     private  ExpandableListView  expandableListView_one;
 27
 28     @Override
 29     public void onCreate(Bundle savedInstanceState) {
 30         super.onCreate(savedInstanceState);
 31 //        requestWindowFeature(Window.FEATURE_NO_TITLE);  //设置为无标题
 32         setContentView(R.layout.expandablelistview);
 33         expandableListView_one =(ExpandableListView)findViewById(R.id.expandableListView);
 34         groupArray =new ArrayList<String>();
 35         childArray = new ArrayList<List<String>>();
 36
 37         /*-第一季-*/
 38         initdate();
 39         expandableListView_one.setAdapter(new ExpandableListViewaAdapter(ExpandableListViewDemo.this));
 40
 41         /*-第二季-*/
 42 //        groupArray.add("移动开发");
 43 //        List<String> arrayList = new ArrayList<String>();
 44 //        arrayList.add("Android");
 45 //        arrayList.add("IOS");
 46 //        arrayList.add("Windows Phone");
 47 //        //组循环
 48 //        for(int index=0;index<groupArray.size();++index)
 49 //        {
 50 //            childArray.add(arrayList);
 51 //        }
 52 //        expandableListView_one.setAdapter(new ExpandableListViewaAdapter(ExpandableListViewDemo.this));
 53
 54     }
 55     class ExpandableListViewaAdapter extends BaseExpandableListAdapter {
 56         Activity activity;
 57          public  ExpandableListViewaAdapter(Activity a)
 58             {
 59                 activity = a;
 60             }
 61        /*-----------------Child */
 62         @Override
 63         public Object getChild(int groupPosition, int childPosition) {
 64             // TODO Auto-generated method stub
 65             return childArray.get(groupPosition).get(childPosition);
 66         }
 67
 68         @Override
 69         public long getChildId(int groupPosition, int childPosition) {
 70             // TODO Auto-generated method stub
 71             return childPosition;
 72         }
 73
 74         @Override
 75         public View getChildView(int groupPosition, int childPosition,
 76                 boolean isLastChild, View convertView, ViewGroup parent) {
 77
 78             String string =childArray.get(groupPosition).get(childPosition);
 79
 80             return getGenericView(string);
 81         }
 82
 83         @Override
 84         public int getChildrenCount(int groupPosition) {
 85             // TODO Auto-generated method stub
 86             return childArray.get(groupPosition).size();
 87         }
 88        /* ----------------------------Group */
 89         @Override
 90         public Object getGroup(int groupPosition) {
 91             // TODO Auto-generated method stub
 92             return getGroup(groupPosition);
 93         }
 94
 95         @Override
 96         public int getGroupCount() {
 97             // TODO Auto-generated method stub
 98             return groupArray.size();
 99         }
100
101         @Override
102         public long getGroupId(int groupPosition) {
103             // TODO Auto-generated method stub
104             return groupPosition;
105         }
106
107         @Override
108         public View getGroupView(int groupPosition, boolean isExpanded,
109                 View convertView, ViewGroup parent) {
110
111            String   string=groupArray.get(groupPosition);
112            return getGenericView(string);
113         }
114
115         @Override
116         public boolean hasStableIds() {
117             // TODO Auto-generated method stub
118             return false;
119         }
120
121         @Override
122         public boolean isChildSelectable(int groupPosition, int childPosition)
123         {
124             // TODO Auto-generated method stub
125             return true;
126         }
127
128         private TextView  getGenericView(String string )
129         {
130               AbsListView.LayoutParams  layoutParams =new AbsListView.LayoutParams(
131                     ViewGroup.LayoutParams.MATCH_PARENT,
132                     ViewGroup.LayoutParams.WRAP_CONTENT);
133
134               TextView  textView =new TextView(activity);
135               textView.setLayoutParams(layoutParams);
136
137               textView.setGravity(Gravity.CENTER_VERTICAL |Gravity.LEFT);
138
139               textView.setPadding(40, 0, 0, 0);
140               textView.setText(string);
141               return textView;
142          }
143     }
144
145     private void initdate()
146     {
147         addInfo("语言", new String[]{"Oracle","Java","Linux","Jquery"});
148         addInfo("男人的需求", new String[]{"金钱","事业","权力","女人","房子","车","球"});
149     }
150     private void addInfo(String group,String []child) {
151
152         groupArray.add(group);
153
154         List<String>  childItem =new ArrayList<String>();
155
156         for(int index=0;index<child.length;index++)
157         {
158             childItem.add(child[index]);
159         }
160          childArray.add(childItem);
161     }
162 }
时间: 2024-10-16 22:06:20

android ExpandableListView详解的相关文章

android ExpandableListView详解(转载)

ExpandableListView是android中可以实现下拉list的一个控件,是一个垂直滚动的心事两个级别列表项手风琴试图,列表项是来自ExpandableListViewaAdapter,组可以单独展开. 重要方法: 1 2 3 4 5 6 7 8 9 10 11 12 expandGroup (int groupPos) ;//在分组列表视图中 展开一组, setSelectedGroup (int groupPosition) ;//设置选择指定的组. setSelectedChi

[gitbook] Android框架分析系列之Android Binder详解

请支持作者原创: https://mr-cao.gitbooks.io/android/content/android-binder.html Android Binder详解 Table of Contents 1. binder简介 2. binder的实现 2.1. IBinder类简介 2.2. IInterface类简介 2.3. BpBinder和BBinder简介 2.4. ProcessState和IPCThreadState简介 2.5. ServiceManager简介 2.

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

android矩阵详解

Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放.平移.旋转等操作. 在Android里面,Matrix由9个float值构成,是一个3*3的矩阵.最好记住.如下图: 解释一下,上面的sinX和cosX,表示旋转角度的cos值和sin值,注意,旋转角度是按顺时针方向计算的. translateX和translateY表示x和y的平移量.scale是缩放的比例,1是不变,2是表示缩放1/2,这样子. 在android.graphics.Matrix中有对应旋转的函

Android ProgressBar详解以及自定义

版本:1.0 日期:2014.5.16 版权:© 2014 kince 转载注明出处 这一次主要说一下Android下的进度条,为什么是它呢,因为近期被其各种美轮美奂的设计所倾倒,计划逐渐去实现.另外一个因素也是它也是为数不多的直接继承于View类的控件,从中可以学习到一些自定义控件的知识.下面列举了一些个人觉得还算漂亮的进度条,仅供参考. 是不是很漂亮,其实就像上面图形展示的那样,进度条大体上无非就是这几种形式.这样一来肯定是需要自定义了,所以方向有两个:要么继承于系统的ProgressBar

Android 菜单详解

Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该种方式参见Android 资源详解(二) 菜单资源,二是在.java中添加 1.覆盖Activity 的 onCreateOptionsMenu(Menu  menu)方法,当我们第一次打开菜单 时该方法被自动调用. 2.调用Menu的 add()方法添加菜单项(Menultem) ,可以调用Men

Android菜单详解(一)——理解android中的Menu

前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu"键,由此可见菜单在Android程序中的特殊性.An

Android surfaceview详解

周末看<精通Android游戏开发>(Pro Android Games),里面讲到游戏的框架,其中一个重要的概念surfaceview,觉得不是很理解,于是花了一点时间研究了下,写下自己的心得. surface,这个单词的意思是浮在表面的,那么surfaceview就是浮在表面的view了.如果真的这样解释,估计有人要拍砖了.然而,话虽不能这么说,取这个名儿,多少还是有点关系的.surface是一个可见区域. 我们在屏幕上看到的这些view,在屏幕上看到的就是画面,在内存中就是一块内存区.绘

android ViewPager详解

Viewpager 在android界面布局中属于常用类型 ,它可以做导航,页面菜单,进入软件是的欢迎界面 等等.比现在最流行的几款手机软件  ,QQ,微信,微博 等 ,其主界面 都用到了ViewPager,所以学好它,势在必得 ,在这里总结了下, 先用图解 : 这是一个仿微博界面的xml布局 ,他们之间的关系经常搞混淆,怕记不住 ,总结了几句话:ViewPager里面含界面,它的改变控制(title)Imageview的变化,Textview控制页面,并间接控制Title(imageview)