使用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同学约翰·史密斯,收集李四)

最新文章

  1. 如何删除GIT中的.DS_Store
  2. oracle数据库开启的时候 是先开监听还是先开主服务,关数据库的时候呢???
  3. C# WinForm程序打印条码 Code39码1
  4. bzoj4127
  5. ASP.NET中ListBox控件的使用
  6. asp之Eval()函数
  7. ubuntu系统使用SSH免密码登陆
  8. Vivado简单调试技能
  9. mongodb 的服务启动和基本操作命令
  10. UWP中实现大爆炸效果(二)
  11. snprintf笔记
  12. mysql5.6版本的优化
  13. maven坑-Failure to transfer org.apache.maven:maven
  14. 8.3版本提示未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序
  15. springboot 2.0 mariadb hikari-cp连接池
  16. webpack介绍 安装 常用命令
  17. About me &amp; 一些置顶的博文
  18. (转)Visual Studio 2013新功能预览:增代码的透明度和可追溯性
  19. ie兼容,手机端兼容问题
  20. bzoj 2648: SJY摆棋子&amp;&amp;2716: [Violet 3]天使玩偶 --kdtree

热门文章

  1. Python re正则表达式
  2. centos7 设备 mariadb-10
  3. ImportError with IronPython in C#
  4. c++分割字符串(类似于boost::split)
  5. Java正则表达式例子汇总
  6. R三星463无线网卡驱动,声音驱动程序,FN快捷键驱动,Easy_Display_Manager
  7. Hosting WCF Service
  8. canvas绘制百分比圆环进度条
  9. 低压电力采集平台DW710C与PC沟通
  10. Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号