使用BaseExpandableListAdapter 以实现的可折叠的所谓列表,例如QQ朋友们在分组功能。

基于BaseExpandableListAdapter扩大ExpandableList说明,今天,有两个主要的网上流行:第一种方法是BaseExpandableListAdapter传入两个数组,第一个是表示Group(文件夹头)信息的一维数组,第二个是表示Child(文件夹子项)的二维数组数组;另外一种是构建两个类,一个是表示文件夹信息的GroupInfo类。还有一个是表示子项信息的ChildInfo类,然后传入BaseExpandableListAdapter。通过对照发现,第一种方法因为数组是固定的。而实际项目中往往须要动态变化的文件夹和子项。因此用处不大。另外一种方法文件太多,实现复杂。这里提供一种方法,传递两个个动态的二维数组来实现文件夹结构。

package com.example.test;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.view.View.OnClickListener; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Group数据
ArrayList<String> groupList = new ArrayList<String>();
groupList.add("我的好友");
groupList.add("我的亲人");
groupList.add("我的同学");
//Child数据
ArrayList<String> itemList1 = new ArrayList<String>();
itemList1.add("小米");
itemList1.add("小李");
ArrayList<String> itemList2 = new ArrayList<String>();
itemList2.add("小丽");
itemList2.add("小小");
itemList2.add("小可");
ArrayList<String> itemList3 = new ArrayList<String>();
itemList3.add("小南");
itemList3.add("小飞");
itemList3.add("小丁");
itemList3.add("小美");
ArrayList<ArrayList<String>> childList = new ArrayList<ArrayList<String>>();
childList.add(itemList1);
childList.add(itemList2);
childList.add(itemList3);
//可折叠List
ExpandableListView list = new ExpandableListView(this);
ExpandableListAdapter mAdapter = new MyExpandableListAdapter(groupList, childList);
list.setAdapter(mAdapter); list.setCacheColorHint(0x00000000);
list.setSelector(new ColorDrawable(Color.TRANSPARENT));
list.setGroupIndicator(null);
for (int i = 0; i < mAdapter.getGroupCount(); i++) {
list.expandGroup(i);
}
setContentView(list);
}
//Adapter
private class MyExpandableListAdapter extends BaseExpandableListAdapter {
private ArrayList<String> groupList;
private ArrayList<ArrayList<String>> childList; MyExpandableListAdapter(ArrayList<String> groupList, ArrayList<ArrayList<String>> childList) {
this.groupList = groupList;
this.childList = childList;
} public Object getChild(int groupPosition, int childPosition) {
return childList.get(groupPosition).get(childPosition);
} private int selectedGroupPosition = -1;
private int selectedChildPosition = -1; public void setSelectedPosition(int selectedGroupPosition, int selectedChildPosition) {
this.selectedGroupPosition = selectedGroupPosition;
this.selectedChildPosition = selectedChildPosition;
} public long getChildId(int groupPosition, int childPosition) {
return childPosition;
} public int getChildrenCount(int groupPosition) {
return childList.get(groupPosition).size();
} public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = null;
if (convertView == null) {
textView = new TextView(MainActivity.this);
textView.setPadding(32, 10, 0, 10);
convertView = textView;
} else {
textView = (TextView) convertView;
} textView.setText(getChild(groupPosition, childPosition).toString()); if (groupPosition == selectedGroupPosition) {
if (childPosition == selectedChildPosition) {
textView.setBackgroundColor(0xffb6ddee);
} else {
textView.setBackgroundColor(Color.TRANSPARENT);
}
} textView.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setSelectedPosition(groupPosition, childPosition);
notifyDataSetChanged();
}
});
return textView;
} public Object getGroup(int groupPosition) {
return groupList.get(groupPosition);
} public int getGroupCount() {
return groupList.size();
} public long getGroupId(int groupPosition) {
return groupPosition;
} public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
LinearLayout cotain = new LinearLayout(MainActivity.this);
cotain.setPadding(0, 10, 0, 10);
cotain.setGravity(Gravity.CENTER_VERTICAL); ImageView imgIndicator = new ImageView(MainActivity.this);
TextView textView = new TextView(MainActivity.this);
textView.setText(getGroup(groupPosition).toString());
textView.setPadding(5, 0, 0, 0); if (isExpanded) {
imgIndicator.setBackgroundResource(R.drawable.bg_arrow_up);
} else {
imgIndicator.setBackgroundResource(R.drawable.bg_arrow_down);
}
cotain.addView(imgIndicator);
cotain.addView(textView);
return cotain;
} public boolean hasStableIds() {
return true;
} public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

groupList 用于组名(类似QQ好友、同学、朋友),

childList 每个元素是一组子数据的(类似QQ同学约翰·史密斯,收集李四)

[Android]BaseExpandableListAdapter实现可折叠列表的更多相关文章

  1. Android开发 ExpandableListView 可折叠列表详解

    前言 在需要实现一个List的item需要包含列表的时候,我们就可以选择ExpandableListView. 其实这个View的原始设计还是ListView的那套.就是增加2层的ListView而已 ...

  2. Android零基础入门第48节:可折叠列表ExpandableListView

    原文:Android零基础入门第48节:可折叠列表ExpandableListView 上一期学习了AutoCompleteTextView和MultiAutoCompleteTextView,你已经 ...

  3. Android学习笔记(23):列表项的容器—AdapterView的子类们

    AdapterView的子类的子类ListView.GridView.Spinner.Gallery.AdapterViewFlipper和StackView都是作为容器使用,Adapter负责提供各 ...

  4. C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表

    /* ---------------------------------------------------------- 文件名称:WMIUsbQuery.cs 作者:秦建辉 MSN:splashc ...

  5. Android ListView 长按列表弹出菜单

    Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMen ...

  6. Android BottomSheet:List列表或Grid网格展示(3)

     Android BottomSheet:List列表或Grid网格展示(3) BottomSheet可以显示多种样式的底部弹出面板风格,比如常见的List列表样式或者Grid网格样式,以一个例子 ...

  7. android 实现QQ好友列表

    在某些Android开发群里,看到有些新手问怎么实现QQ好友列表,其实网上一搜挺多的.接触Android,也才一年的时间,大部分时间花在工作上(解bug...),界面上开发很少参与.自己维护的系统应用 ...

  8. 微信安卓版下载 Android微信各版本列表

    前面ytkah弄了一个iso微信各版本列表,现在就来整一个微信 for Android各版本列表,方便大伙下载.每个版本都放出一些新的功能或修复相关错误,详情可以点击下面的版本链接进行查看.资源收集于 ...

  9. [zt] Android中使用List列表

    原文地址:http://www.vogella.com/tutorials/AndroidListView/article.html 1. Android and Lists 1.1. Using l ...

随机推荐

  1. oracle 关于日期格式转换与使用

    在oracle中我们经常会和日期打交道,在做报表的时候经常会用日报,周报,月报之类的条件进行分组: 我写了些例子来启发下大脑 select Sysdate from dual select to_ch ...

  2. Test SRM Level One: TemperatureScales

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=6038 因为TopCoder SRM比赛使用的编译器进行了升级, ...

  3. Silverlight之 xaml布局

    目标:在两周内完成一个界面的功能 第1阶段:完成xaml的布局 准备:视频4-14节 第2阶段: 完成环状图 柱状图 TreeView样式 准备: 矢量绘图  telerik 自定义控件  自定义控件 ...

  4. Java反射探索研究(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankakay 摘要:本文详细深入讲解是Java中反射的机制,并介绍了如何通过反射来生成对象.调用函数.取得 ...

  5. 20140719中国互联网公司市值排名TOP20

    近期在找工作.关注了一下中国互联网公司的市值,实际情况跟想象的区别非常大. 比方异军突起的小米.京东.唯品会.聚美优品. 比方乐视网由于政策原因,市值两日缩水10亿$.停牌了. 搜房网市值90天蒸发3 ...

  6. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)

    原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意 ...

  7. 使用Intellij Idea生成可执行文件jar,开关exe文件步骤

    确保其Java代码是没有问题的,在IDEA常执行的,然后.按以下步骤: 步骤一:打开File -> Project Structure -> Artifacts,例如以下图 步骤二:点击& ...

  8. quick-cocos2d-x endToLua 退出会卡住

    问题: 马上赚钱,退出会出现卡住,然后清理,死界面的情况,百思不得其解,昨天在做push的时候,突然发现.在android里面弹出一个退出对话框,点击确定退出,这时候调用endtolua时,有时也会切 ...

  9. 你听说过XML吗?

    我们每天都会见到各种各样的书,今天我们就来谈一谈有关书籍带给我们学习的启发. 正如上图所看到的,不同的书籍有不同的外观,比如教科书.儿童图书等:而且书也不是随便能够出版的,要有自己文档结构,语义规则. ...

  10. 了解HTML5和“她”的 API (三)

    Web Workers(后台线程) JavaScript是单线程的,较长的javascript运算会阻塞UI线程. web worker 是运行在后台的 JavaScript,不会影响页面的性能. 在 ...