- 浏览: 707104 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (260)
- web 开发 (44)
- struts (14)
- java (39)
- 我的感受 (2)
- ajax (2)
- spring (22)
- Hibernate (4)
- struts2 (1)
- java 面试题 (1)
- 英语 学习类 (2)
- jdk1.6特性 (1)
- extjs (13)
- oracle (3)
- JQuery (3)
- ┠ 『Spring 3.0』 ┨ (1)
- 『LOG4J』 (2)
- 『常用数据』 (1)
- JavaMail (0)
- 〓『 EJB3.0 』〓 (0)
- HTML5 (5)
- Canvas (0)
- spring2.5 (0)
- HPH 5 (1)
- C# .net (0)
- UML (1)
- REST (2)
- JS_validate (1)
- 项目管理文章 (1)
- 闲聊闲记 (12)
- SQL-SQL (3)
- javascript (18)
- js (4)
- linux (8)
- 电子政务 (1)
- 项目对象模型 (1)
- 系统集成项目管理 (1)
- shell (2)
- mysql (1)
- solr (5)
- cxf;services (2)
- 11 (0)
- 缓存 (1)
- cached (3)
- 单片机通信 (1)
- cached;oscache (1)
- android (15)
- android;蓝牙 (1)
- Lucene (5)
- TTS (1)
- 网络爬虫 (1)
- HtmlCleaner (1)
- iPhone (2)
- 有感而发 (1)
- Python (0)
- jetty (1)
- Redis (1)
- hadoop (1)
- socket (1)
- 色彩顾问 (1)
- javaapns (1)
- bat (1)
- object-c (4)
- ios (4)
- C-学习 (1)
- 搜索 (1)
- c# (1)
最新评论
-
annie211:
Angularjs构建一个CRUD应用可能用到的全部内容包括:数据绑定、基本模板标识符、表单验证、路由、深度链接、组件重用、依赖注入 -
潇寒听竹:
你好,请问您上传的那个APK为什么每次只能识别一次,不能连续识 ...
pocketsphinxAdroid离线语音识别---入门 -
ichenwenjin:
Angularjs构建一个CRUD应用可能用到的全部内容包括:数据绑定、基本模板标识符、表单验证、路由、深度链接、组件重用、依赖注入 -
NN_iaoiao:
问一下 你的这个People 类 是自定义的还是android ...
android 获取电话本中的联系人列表 -
wangzhe_real:
对于刚接触的我是一个很详细的教程,太感谢了
JAX-RS cxf web服务 rest简单增删改查 集成spring webService
先看一效果图、
列表中要有 图片和文字:
所以我们要实现一个自定义的 适配器。
介绍一个类:BaseExpandableListAdapter
一看就知道是 适配器的一个基类了。
所以我们自定义的适配器要 继承它。
除了 完成这个 适配器,还要有两个自定义模板,分别 组和子列表的,单元模板。如下图:
模板布局xml 要放在 layouts 下面。
main_tree_group.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="45dp" android:background="@color/white" android:gravity="center" android:orientation="vertical" > <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_tree_title_id" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dip" android:background="@color/white" android:text="NoData" android:textColor="@color/black" android:textSize="20dp" android:textStyle="bold" /> </LinearLayout>
子列表模板文件
main_tree_child.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/white" android:gravity="center_vertical" android:orientation="horizontal" android:paddingBottom="5dp" android:paddingLeft="8dp" android:paddingTop="8dp" > <ImageView android:id="@+id/mainChildIcoId" android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/person_icon" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/mainChildText1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:background="@color/white" android:gravity="center_vertical" android:text="CNoData" android:textColor="@color/black" android:textSize="16dp" /> <TextView android:id="@+id/mainChildText2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:background="@color/white" android:gravity="center_vertical" android:text="13693668970" android:textColor="@color/black" android:textSize="12dp" /> </LinearLayout> </LinearLayout>
然后写两个对 模板文件的 bean
main_tree_group.xml 对应 bean
//父单元 class ExpandableGroupHolder { TextView title; }
main_tree_child.xml
//单元类 class ExpandableListHolder { TextView nickName; TextView phone; ImageView ioc; }
现在来实现最重要的关结。 适配器
MainListExpandableListAdapter.java
我这里把 上面两个模板对应java bean 写成 自定义适配器的内部类。
package com.main.apadter; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView; import com.main.R; public class MainListExpandableListAdapter extends BaseExpandableListAdapter { //单元类 class ExpandableListHolder { TextView nickName; TextView phone; ImageView ioc; } //父单元 class ExpandableGroupHolder { TextView title; } private List<Map<String, Object>> groupData;//组显示 private List<List<Map<String, Object>>> childData;//子列表 private LayoutInflater mGroupInflater; //用于加载group的布局xml private LayoutInflater mChildInflater; //用于加载listitem的布局xml //自宝义构造 public MainListExpandableListAdapter(Context context, List<Map<String, Object>> groupData, List<List<Map<String, Object>>> childData) { this.childData=childData; this.groupData=groupData; mChildInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mGroupInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } //必须实现 得到子数据 @Override public Object getChild(int groupPosition, int j) { return childData.get(groupPosition).get(j); } @Override public long getChildId(int groupPosition, int j) { return groupPosition; } @Override public int getChildrenCount(int i) { return childData.get(i).size(); } @Override public Object getGroup(int i) { return groupData.get(i); } @Override public int getGroupCount() { return groupData.size(); } @Override public long getGroupId(int i) { return i; } @Override public boolean hasStableIds() {//行是否具有唯一id return false; } @Override public boolean isChildSelectable(int i, int j) {//行是否可选 return false; } @Override public View getGroupView(int groupPosition, boolean flag, View convertView, ViewGroup viewgroup) { ExpandableGroupHolder holder = null; //清空临时变量holder if (convertView == null) { //判断view(即view是否已构建好)是否为空 convertView = mGroupInflater.inflate(R.layout.main_tree_group, null); holder = new ExpandableGroupHolder(); holder.title=(TextView) convertView.findViewById(R.id.main_tree_title_id); convertView.setTag(holder); } else { //若view不为空,直接从view的tag属性中获得各子视图的引用 holder = (ExpandableGroupHolder) convertView.getTag(); } String title=(String)this.groupData.get(groupPosition).get("title"); holder.title.setText(title); notifyDataSetChanged(); return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup viewgroup) { ExpandableListHolder holder = null; if (convertView == null) { convertView = mChildInflater.inflate(R.layout.main_tree_child, null); holder = new ExpandableListHolder(); holder.nickName = (TextView) convertView.findViewById(R.id.mainChildText1); holder.ioc = (ImageView) convertView.findViewById(R.id.mainChildIcoId); holder.phone = (TextView) convertView.findViewById(R.id.mainChildText2); convertView.setTag(holder); } else {//若行已初始化,直接从tag属性获得子视图的引用 holder = (ExpandableListHolder) convertView.getTag(); } Map<String,Object> unitData=this.childData.get(groupPosition).get(childPosition); holder.nickName.setText((String)unitData.get("nickName")); holder.ioc.setImageResource((Integer) unitData.get("ico")); holder.phone.setText((String)unitData.get("phone")); return convertView; } }
接下来要做的就是 利用自定义的适配器。 添加盟数据进行显了。
1、建一个 xml 设样式并设id
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:listSelector="@color/white" android:orientation="vertical" > <ExpandableListView android:id="@+id/expandable_id" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/white" android:drawSelectorOnTop="false" android:listSelector="@color/white" /> </LinearLayout>
创建activity
public class MainActivity extends Activity { // 声明对象 private MainListExpandableListAdapter adapter = null; List<Map<String, Object>> groups; List<List<Map<String, Object>>> childs; ExpandableListView expandableListView; private FriendsDao friendsDao; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); friendsDao=new FriendsDao(this,"ll1x.db",null,2); //为ExpandableListView准备数据 groups = new ArrayList<Map<String, Object>>(); Map<String, Object> group = new HashMap<String, Object>(); group.put("title", "我的家人"); groups.add(group); List<Map<String, Object>> child1 = new ArrayList<Map<String, Object>>(); Cursor cursor = friendsDao.selectAll(); while(cursor.moveToNext()){ Map<String, Object> child1Data1 = new HashMap<String, Object>(); child1Data1.put("nickName", cursor.getString(cursor.getColumnIndex("nickName"))); child1Data1.put("phone", cursor.getString(cursor.getColumnIndex("phone"))); child1Data1.put("ico", R.drawable.icon); child1.add(child1Data1); } childs = new ArrayList<List<Map<String, Object>>>(); childs.add(child1); // 实例化ExpandableListView对象 expandableListView = (ExpandableListView) findViewById(R.id.expandable_id); // 实例化ExpandableListView的适配器 adapter = new MainListExpandableListAdapter(getApplicationContext(), groups, childs); // 设置适配器 expandableListView.setAdapter(adapter); // 设置监听器 expandableListView.setOnChildClickListener(new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Log.d("test", "GroupPosition is " + groupPosition); Log.d("test", "ChildPosition is" + childPosition); return false; } }); } }
ok 可了。可以放到项目当去了。
发表评论
-
android手机控制家电
2012-11-29 14:43 1105android手机控制家电 北飘了许久,编写程序代码 ... -
Android Activity提供服务(被调用Activity 给调用Activity 反回数据)
2012-05-07 10:57 1568网上看了小例子、 现在自己整理一下子: ... -
android 选择本地图片并截剪图片保存到,sdcard指定目录中
2012-05-06 13:15 21876这里,要把选择 和 截剪后的图片存到sdcard 上的指 ... -
android 获取电话本中的联系人列表
2012-05-04 13:41 18062首先这里介绍一下 获取思路。 第一种 : 直接查通讯录 ... -
android 控件属性 116
2012-04-07 14:05 1194android:bufferType android:tex ... -
android 页面主题
2012-03-01 18:22 990http://blog.csdn.net/qjbagu/art ... -
Android TTS(Text To Speech)
2011-12-08 11:32 2059TTS(Text To Speech) And ... -
pocketsphinxAdroid离线语音识别---入门
2011-12-01 11:14 28346现在的语音识别大部分都是基于服务端的开发,需要网 ... -
Android NDK--(调用c c++ 库)
2011-11-15 18:08 2408NDK编程入门笔记 http://www.c ... -
I9008L 刷回原版.
2011-11-08 09:19 1979共享自:http://www.cnmo.com/ 手机中国 ... -
android 定制机删定制程序---
2011-11-02 18:02 1084分为步聚、、 一、root 权限: SuperOne ... -
Android的权限 permission
2011-10-31 09:58 1285出自:http://www.cnblogs.com/houfe ... -
分享 Android 识音识别 挺有想法的。
2011-10-27 13:52 951我本来也想做一个、刚看到这个视频 ... -
Android 教程例子列表
2011-05-19 09:20 2547Android Android视录视频示例 A ...
相关推荐
`ExpandableListView`是Android SDK提供的一种特殊的ListView,它允许每个列表项可以进一步扩展成子列表。这个控件由两层数据结构组成:父级列表(Groups)和子级列表(Children)。父级列表是可点击的,点击后会...
在Android开发中,`ExpandableListView`是一种常用的控件,它可以展示可展开和折叠的列表,通常用于构建具有层级结构的数据展示。在这个“android ExpandableListView三级菜单的使用”示例中,我们将深入探讨如何...
在Android开发中,`ExpandableListView`是一种非常实用的列表控件,它允许用户通过点击条目来展开或折叠子列表。这个控件是`ListView`的扩展,提供了更丰富的交互性和展示层次结构数据的能力。在本文中,我们将深入...
在Android开发中,ExpandableListView是一种可扩展的列表视图,它可以包含多个子项,非常适合用来展示层次结构的数据。在本项目"Android 扩展 带CheckBox的expandableListview"中,开发者针对ExpandableListView进行...
`ExpandableListView`继承自`ListView`,增加了可扩展的功能。它由两个基本组件构成:父条目(Group)和子条目(Child)。一个父条目可以包含零个或多个子条目,而多个父条目则构成了整个`ExpandableListView`的数据...
在Android开发中,`ExpandableListView`是一种常用的控件,它允许用户展开...通过以上步骤,我们可以创建一个具有联动效果的可扩展列表,用户可以选择列表中的任意子项,也可以通过全选或反选按钮一次性选择所有子项。
`ExpandableListView`是Android平台中一个非常实用的列表控件,它允许用户展示层次结构的数据,例如,一个父项可以展开显示多个子项。在Android应用开发中,当需要展示具有嵌套关系的数据时,`ExpandableListView`是...
在Android开发中,`ExpandableListView`是一种非常实用的视图组件,它扩展了标准的`ListView`功能,允许开发者创建具有可展开和折叠的分组列表。这种控件非常适合于展示层次结构清晰、信息组织有序的数据,比如目录...
在这个"Android ExpandableListView双层嵌套实现三级树形菜单"的例子中,我们将深入探讨如何通过扩展这个控件来创建一个包含三层结构的树形菜单。 首先,我们要理解ExpandableListView的基本工作原理。...
本篇文章将深入探讨如何在Android中自定义可扩展列表`ExpandableListView`。 首先,我们要理解`ExpandableListView`的基本结构。它由两部分组成:父项(Group)和子项(Child)。每个父项可以包含多个子项,用户...
在Android开发中,`ExpandableListView`是一种常用的控件,它扩展了标准的`ListView`功能,允许子项可以被展开或折叠,呈现层次结构的数据。这个控件非常适合用来展示具有树状结构的信息,比如菜单、目录或者组织...
这个“完美ExpandableListView仿QQ列表”项目旨在提供一种高度可扩展和用户友好的实现,使得开发者能够轻松地创建具有类似QQ列表功能的应用。 首先,我们来详细了解一下ExpandableListView的基本概念。它是一个特殊...
这个小Demo是关于如何使用`ExpandableListView`来创建一个可扩展的列表视图,使应用界面更加互动和功能丰富。 `ExpandableListView`与普通的`ListView`相比,具有更高级的功能。它不仅仅是一个简单的列表,而是可以...
接下来,我们需要创建一个扩展`BaseExpandableListAdapter`的自定义适配器,用于填充`ExpandableListView`。适配器负责将数据模型转换为视图。在这个过程中,我们需要重写以下几个方法: - `getGroupCount()`:返回...
`ExpandableListView`是一个可扩展的列表视图,允许用户展开和折叠各个组,每个组内可以包含多个子项。在Android中,`ExpandableListView`的使用需要自定义适配器,通常采用`BaseExpandableListAdapter`作为基础。...
`ExpandableListView`是`ListView`的一个扩展,增加了可折叠和可展开的功能。与`ListView`相比,`ExpandableListView`包含两种类型的条目:父条目(Group)和子条目(Child)。每个父条目可以有零个或多个子条目,...
ExpandableListView是Android SDK提供的一种可扩展的列表视图,允许用户展示分组数据,每组内可以包含多个子项,非常适合用于构建层次结构清晰的购物车界面。 首先,我们要理解ExpandableListView的基本工作原理。...
在Android开发中,`ExpandableListView`是一种常用的控件,它可以展示可展开和折叠的列表,通常用于构建具有层级结构的数据展示。这个控件能够帮助用户更好地理解和操作复杂的数据,例如菜单、目录或者树状结构的...
在Android开发中,`ExpandableListView`是一种可扩展的列表视图,允许用户折叠和展开组项以显示或隐藏子项。这个`Android代码-基于自定义适配器的ExpandableListView源码.zip`文件包含了一个示例项目,演示了如何...
在这个例子中,我们将会深入探讨如何利用`ExpandableListView`来创建一个可展开和折叠的菜单系统,实现丰富的交互效果。 `ExpandableListView`与普通的`ListView`相比,其主要优势在于它支持子项的展开和收缩,这...