博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 可展开(收缩)的列表ListView(ExpandableListView)
阅读量:6413 次
发布时间:2019-06-23

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

每天都在用QQ聊天,今天突然一想,android怎么实现列表的分组展开呢?看了看api,发现其实现过程也很简单。先看一下最终效果吧!

 

1、首先创建我们的Activity,继承 android.app.ExpandableListActivity,直接看代码吧。

package com.ideasandroid.sample;import android.app.ExpandableListActivity;import android.os.Bundle;import com.ideasandroid.sample.adapter.IdeasExpandableListAdapter; /** * @author IdeasAndroid * 可展开(收缩)列表示例 */public class IdeasExpandableListView extends ExpandableListActivity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //设置列表适配器IdeasExpandableListAdapter        setListAdapter(new IdeasExpandableListAdapter(this));    }}

2、创建适配器,继承android.widget.BaseExpandableListAdapter。

package com.ideasandroid.sample.adapter; import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.TextView; /** * @author IdeasAndroid  * 可展开(收缩)列表示例 */public class IdeasExpandableListAdapter extends BaseExpandableListAdapter {         private Context mContext = null;        // 测试数据,开发时可能来自数据库,网络....        private String[] groups = { "家人", "朋友", "同事" };        private String[] familis = { "老爸", "老妈", "妹妹" };        private String[] friends = { "小李", "张三", "李四" };        private String[] colleagues = { "陈总", "李工", "李客户" };         private List
groupList = null; private List
> itemList = null; public IdeasExpandableListAdapter(Context context) { this.mContext = context; groupList = new ArrayList
(); itemList = new ArrayList
>(); initData(); } /** * 初始化数据,将相关数据放到List中,方便处理 */ private void initData() { for (int i = 0; i < groups.length; i++) { groupList.add(groups[i]); } List
item1 = new ArrayList
(); for (int i = 0; i < familis.length; i++) { item1.add(familis[i]); } List
item2 = new ArrayList
(); for (int i = 0; i < friends.length; i++) { item2.add(friends[i]); } List
item3 = new ArrayList
(); for (int i = 0; i < colleagues.length; i++) { item3.add(colleagues[i]); } itemList.add(item1); itemList.add(item2); itemList.add(item3); } public boolean areAllItemsEnabled() { return false; } /* * 设置子节点对象,在事件处理时返回的对象,可存放一些数据 */ public Object getChild(int groupPosition, int childPosition) { return itemList.get(groupPosition).get(childPosition); } public long getChildId(int groupPosition, int childPosition) { return childPosition; } /* * 字节点视图,这里我们显示一个文本对象 */ public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView text = null; if (convertView == null) { text = new TextView(mContext); } else { text = (TextView) convertView; } // 获取子节点要显示的名称 String name = (String) itemList.get(groupPosition).get(childPosition); // 设置文本视图的相关属性 AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 40); text.setLayoutParams(lp); text.setTextSize(18); text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); text.setPadding(45, 0, 0, 0); text.setText(name); return text; } /* * 返回当前分组的字节点个数 */ public int getChildrenCount(int groupPosition) { return itemList.get(groupPosition).size(); } /* * 返回分组对象,用于一些数据传递,在事件处理时可直接取得和分组相关的数据 */ 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) { TextView text = null; if (convertView == null) { text = new TextView(mContext); } else { text = (TextView) convertView; } String name = (String) groupList.get(groupPosition); AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 40); text.setLayoutParams(lp); text.setTextSize(18); text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); text.setPadding(36, 0, 0, 0); text.setText(name); return text; } /* * 判断分组是否为空,本示例中数据是固定的,所以不会为空,我们返回false * 如果数据来自数据库,网络时,可以把判断逻辑写到这个方法中,如果为空 * 时返回true */ public boolean isEmpty() { return false; } /* * 收缩列表时要处理的东西都放这儿 */ public void onGroupCollapsed(int groupPosition) { } /* * 展开列表时要处理的东西都放这儿 */ public void onGroupExpanded(int groupPosition) { } /* * Indicates whether the child and group IDs are stable across changes to * the underlying data. */ public boolean hasStableIds() { return false; } /* * Whether the child at the specified position is selectable. */ public boolean isChildSelectable(int groupPosition, int childPosition) { return true; }}

转:

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

你可能感兴趣的文章
Error: Password file read access must be restricted: /etc/cassandra/jmxremote.password
查看>>
HDU Problem 4907 Take schedule 【二分】
查看>>
注解@Slf4j的作用
查看>>
linux 文件操作与目录操作
查看>>
解决IE6浏览器下position:fixed固定定位问题
查看>>
KMP串匹配算法解析与优化
查看>>
css3动画简介以及动画库animate.css的使用
查看>>
javascript DOM节点操作
查看>>
c++ invoke java in android
查看>>
meta 之 viewport
查看>>
Linux下文件 ~/.bashrc 和 ~/.bash_profile 和 /etc/bashrc 和 /etc/profile 的区别 | 用户登录后加载配置文件的顺序...
查看>>
关于在swiper轮播组件中使用echarts的'click'事件无效
查看>>
Android开源项目README规范
查看>>
asp.net core 教程(五)-配置
查看>>
Spring Bean Scope (作用域)
查看>>
Redis命令操作详解
查看>>
c++ map: 使用struct或者数组做value
查看>>
列表中的陷阱
查看>>
算法-无重复字符的最长子串
查看>>
java.lang.ClassNotFoundException: org.apache.axis2.transport.http.AxisAdminServlet
查看>>