使用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 {@Overrideprotected 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);//可折叠ListExpandableListView 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);}//Adapterprivate 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;}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}
}

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

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

转载于:https://www.cnblogs.com/mengfanrong/p/5034084.html

[Android]BaseExpandableListAdapter实现可折叠列表相关推荐

  1. Android基础入门教程——2.4.12 ExpandableListView(可折叠列表)的基本使用

    Android基础入门教程--2.4.12 ExpandableListView(可折叠列表)的基本使用 标签(空格分隔): Android基础入门教程 本节引言: 本节要讲解的Adapter类控件是 ...

  2. Android入门教程四十五之ExpandableListView(可折叠列表)的基本使用

    本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包含多个列表项. ...

  3. 【Android 】零基础到飞升 | ExpandableListView(可折叠列表)的基本使用

    2.5.5 ExpandableListView(可折叠列表)的基本使用 本节引言: 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是ListView的子 ...

  4. java 下拉列表 可折叠 qq分组_2.5.5 ExpandableListView(可折叠列表)的基本使用

    本节引言: 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是ListView的子类, 在ListView的基础上它把应用中的列表项分为几组,每组里又可包含 ...

  5. ExpandableListView(可折叠列表)的基本使用

    本节引言: 本节要讲解的Adapter类控件是ExpandableListView,就是可折叠的列表,它是ListView的子类,在ListView的基础上它把应用中的列表项分为几组,每组里又可包含多 ...

  6. Amdroid ExpandableListView(可折叠列表)的基本使用

    1.ExpandableListView(可折叠列表)的使用: <?xml version="1.0" encoding="utf-8"?>< ...

  7. android购物车栏,Android怎么实现二级列表购物车功能

    Android怎么实现二级列表购物车功能 发布时间:2021-04-16 12:45:40 来源:亿速云 阅读:61 作者:小新 小编给大家分享一下Android怎么实现二级列表购物车功能,希望大家阅 ...

  8. android开发基础_列表视图一(List View)

    官网解释: a view that shows items in a verically list,The items come from the ListAdapter associated wit ...

  9. android开发 RecyclerView 瀑布列表布局

    android开发 RecyclerView 瀑布列表布局 1.写一个内容的自定义小布局: <?xml version="1.0" encoding="utf-8& ...

最新文章

  1. 收藏 | 数据智能与计算机图形学领域2019推荐论文列表(附链接)
  2. SQL Server 2017 AlwaysOn on Linux 配置和维护(18)
  3. 2017年09月23日普级组 树塔狂想曲
  4. Windows Server 2008 磐石风暴系列课程
  5. # 20155337 2017-2018-1 《信息安全系统设计基础》第二周课堂实践+myod
  6. Objective-C语言的动态性
  7. jQuery 的选择器 元素选择器
  8. matlab相位连续显示,matlab设计复合信号不同频率的初相位
  9. 【转载】浅谈嵌入式MCU开发中的三个常见误区
  10. Predict user model based on genus
  11. 【GOF】三种工厂模式~
  12. 信号处理中简单实用的方法——对信号进行平滑处理
  13. 树莓派能做什么?如何使用树莓派
  14. EM算法·最大期望算法
  15. Linux高级进程编程———在任意两个进程间传递文件描述符:使用 sendmsg 和 recvmsg 实现
  16. building workspace问题
  17. 依托同济大学建设的中国(上海)数字城市研究院揭牌成立
  18. 集成QQ钱包---踩坑
  19. java中atomic特点,Java中Atomic类的使用分析
  20. Xilinx FPGA提供DDR4内存接口解决方案

热门文章

  1. 文件流——Excel文件数据读写
  2. 中国人寿构建国内首个Silverlight企业级应用
  3. 英文标点符号翻译大全
  4. 5大AI主题,资助20-30项 | 2022腾讯AI Lab犀牛鸟专项研究计划开放申请中
  5. 清华博士直播 | 如何让AI模型更皮实、更稳定?
  6. CVPR2020 Oral | 旷视研究院提出双边分支网络BBN:攻坚长尾分布的现实世界任务
  7. PyTorch语义分割开源库semseg
  8. 姿态估计 | OpenPose Plus值得期待
  9. 2所“双一流”大学官宣:博士招生考试,延期!
  10. 中国国际影响力优秀学术期刊2020年榜单发布!