- 浏览: 695153 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 1030android手机控制家电 北飘了许久,编写程序代码 ... -
Android Activity提供服务(被调用Activity 给调用Activity 反回数据)
2012-05-07 10:57 1513网上看了小例子、 现在自己整理一下子: ... -
android 选择本地图片并截剪图片保存到,sdcard指定目录中
2012-05-06 13:15 21813这里,要把选择 和 截剪后的图片存到sdcard 上的指 ... -
android 获取电话本中的联系人列表
2012-05-04 13:41 17914首先这里介绍一下 获取思路。 第一种 : 直接查通讯录 ... -
android 控件属性 116
2012-04-07 14:05 1160android:bufferType android:tex ... -
android 页面主题
2012-03-01 18:22 959http://blog.csdn.net/qjbagu/art ... -
Android TTS(Text To Speech)
2011-12-08 11:32 1992TTS(Text To Speech) And ... -
pocketsphinxAdroid离线语音识别---入门
2011-12-01 11:14 28195现在的语音识别大部分都是基于服务端的开发,需要网 ... -
Android NDK--(调用c c++ 库)
2011-11-15 18:08 2321NDK编程入门笔记 http://www.c ... -
I9008L 刷回原版.
2011-11-08 09:19 1946共享自:http://www.cnmo.com/ 手机中国 ... -
android 定制机删定制程序---
2011-11-02 18:02 1011分为步聚、、 一、root 权限: SuperOne ... -
Android的权限 permission
2011-10-31 09:58 1245出自:http://www.cnblogs.com/houfe ... -
分享 Android 识音识别 挺有想法的。
2011-10-27 13:52 914我本来也想做一个、刚看到这个视频 ... -
Android 教程例子列表
2011-05-19 09:20 2443Android Android视录视频示例 A ...
相关推荐
【Android】自定义可扩展列表 ExpandableListViewDemo
android 列表ListView和可扩展列表ExpandableListView的实现
在本Android ExpandablelistView教程中,我们将学习如何在Android中制作可扩展列表。
ExpandableListView:Android中的可扩展面板
ExpandableListView使用详解(可扩展的ListView)
带有可扩展列表项的导航菜单用于导航菜单的示例android应用程序,其中包含材料设计中的可扩展列表项。特征使用材料设计实现易于使用使用可扩展的列表视图在职的布局在布局中添加一个工具栏。 <android.support.v7...
ExpandableListViewDemo 适用于 Android 的基于 RecyclerView 的可扩展列表视图演示
5.3.3 使用可扩展列表——EXpalldableListView 5.3.4实例——简单使用ExpandableListView 5.3.5实例——深入使用可扩展列表 5.4使用菜单——Menu 5.4.1 Menu的使用 5.4.2通过实例学习使用Menu 5.5小结 第6章使用程序...
该项目探索了创建可扩展列表视图的不同方法以及它们的实现方式。 在这个项目中,我使用由Android API提供,也通过创建 。 我使用SlidingTabLayout在其自己的Fragment中显示每个可扩展列表。 要查看如何实现...
5.3.3 使用可扩展列表——EXpalldableListView 5.3.4实例——简单使用ExpandableListView 5.3.5实例——深入使用可扩展列表 5.4使用菜单——Menu 5.4.1 Menu的使用 5.4.2通过实例学习使用Menu 5.5小结 第6章使用程序...
其次,我们的安卓项目源码具有良好的可扩展性和可定制性。我们将项目源码设计为模块化的结构,开发人员可以根据自己的需求选择和定制所需的功能模块。同时,我们还提供了丰富的文档和示例代码,以帮助开发人员理解和...
可扩展自定义列表视图自定义 ExpandableListview 的基本用法专为@Sudheesh Mohan 设计的项目如果您有任何问题,请发送邮件至: ► 你是安卓程序员吗? 加入我们的 Android 开发者团队
多级可扩展 RecyclerView 这个库是RecyclerView类的扩展,使其行为类似于ExpandableListView小部件,但不仅仅是 2 级。先决条件 Add the following dependency in your `build.gradle` file in your app folder:...
Expandit Expandit是适用于Android的库,它提供了高度可定制的可扩展列表视图。 您甚至可以自定义“ Expandit”是否可以扩展!演示版示例应用该视频演示了Expandit的一些功能(使用不同的列表项描述视图,将列表显示...
导航抽屉中的可扩展视图 该项目包含带有可扩展列表视图的导航抽屉。 截图
这是一款页面视图结合可扩展列表demo,该源码基础实现了添加ExpandableListView效果,以及结合了页面视图来实现的,如果发现乱码,请把编码格式转成utf-8就可以了,希望可以帮到需要的朋友。
可扩展的列表视图子集效果,该项目实现ExpandableListView子集使用网格视图的效果,将网格视图进行分组,并可以分别对其点击,具体如效果图所示,希望能够帮到大家。