博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android之ExpandableList扩展用法(基于BaseExpandableListAdapter)
阅读量:6630 次
发布时间:2019-06-25

本文共 5057 字,大约阅读时间需要 16 分钟。

1.简介

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

2.案例

package com.devin;import java.util.ArrayList;import android.app.Activity;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.View.OnClickListener;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;public class PadTestActivity extends Activity {    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);              ArrayList
groupList = new ArrayList
(); for (int i = 0; i < 3; i++) { groupList.add("title"); } ArrayList
itemList1 = new ArrayList
(); itemList1.add("Item1"); itemList1.add("Item2"); ArrayList
itemList2 = new ArrayList
(); itemList2.add("Item1"); itemList2.add("Item21"); itemList2.add("Item3"); ArrayList
itemList3 = new ArrayList
(); itemList3.add("Item1"); itemList3.add("Item2"); itemList3.add("Item3"); itemList3.add("Item4"); ArrayList
> childList = new ArrayList
>(); childList.add(itemList1); childList.add(itemList2); childList.add(itemList3); 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); } private class MyExpandableListAdapter extends BaseExpandableListAdapter { private ArrayList
groupList; private ArrayList
> childList; MyExpandableListAdapter(ArrayList
groupList, ArrayList
> 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(PadTestActivity.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(PadTestActivity.this); cotain.setPadding(0, 10, 0, 10); cotain.setGravity(Gravity.CENTER_VERTICAL); ImageView imgIndicator = new ImageView(PadTestActivity.this); TextView textView = new TextView(PadTestActivity.this); textView.setText(getGroup(groupPosition).toString()); textView.setPadding(5, 0, 0, 0); if (isExpanded) { imgIndicator.setBackgroundResource(R.drawable.macro_minus); } else { imgIndicator.setBackgroundResource(R.drawable.macro_plus); } cotain.addView(imgIndicator); cotain.addView(textView); return cotain; } public boolean hasStableIds() { return true; } public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }}

  上述代码中,过向BaseExpandableListAdapter传递两个动态数组groupList(表示目录头信息)和childList (表示子项信息)来构建目录,一方面能够实现动态的添加数据,另一方面简化了实现,一举两得。另外,重写的BaseExpandableListAdapter,如果应用在实际项目中,需要对getGroupView()和getChildView()方法进行构建缓存(和ListView构建一样),以便优化性能和防止内存泄漏。需要的朋友可以自己构建。

 欢迎关注公众号"Devin说",会不定期更新技术知识

转载地址:http://grwvo.baihongyu.com/

你可能感兴趣的文章
修改数组之----splice
查看>>
a版本冲刺第五天
查看>>
Arduino示例教程超声波测距实验
查看>>
Linux中chkconfig使用介绍
查看>>
二进制方式快速安装MySQL数据库
查看>>
查询指定库中所有表
查看>>
Flash AS3 Loader的一些总结
查看>>
45个纯 CSS 实现的精美边框效果【附在线演示和源码】【下篇】
查看>>
js的逻辑 OR 运算符- ||
查看>>
[SQL Server]一次执行资料夹内的.sql 指令码
查看>>
【计算机视觉】粒子滤波跟踪
查看>>
hadoop集群扩展
查看>>
操作系统诊断
查看>>
[Compose] 19. Leapfrogging types with Traversable
查看>>
Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules
查看>>
2015年度新增开源软件排名TOP100
查看>>
BZOJ 2456: mode(新生必做的水题)
查看>>
View State
查看>>
自旋锁spinlock解析
查看>>
【java.lang.UnsupportedClassVersionError】版本不一致出错
查看>>