控件:ExpandableListView --- 树型组件
main.xml
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"><ExpandableListView android:id="@+id/elistview" android:layout_width="fill_parent" android:layout_height="wrap_content" /></LinearLayout>
MyExpandableListAdapter.java (适配器)
![](/assets/blank.gif)
![](/assets/blank.gif)
package org.lxh.demo; 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;// 继承BaseExpandableListAdapter并覆写类中的抽象方法public class MyExpandableListAdapter extends BaseExpandableListAdapter {// 组名称 public String[] groups = { "我的好友", "家人", "同事", "黑名单" }; // 定义组项 public String[][] children = { { "董鸣楠", "王月清", "周艳军" }, { "父亲", "母亲" }, { "刘宏伟", "李祺", "刘媛" }, { "票贩子", "造假商" } }; // 保存上下文对象 private Context context = null; // 构造方法接收 public MyExpandableListAdapter(Context context) { this.context = context; } @Override // 取得指定的子项 public Object getChild(int groupPosition, int childPosition) { return this.children[groupPosition][childPosition]; } @Override // 取得子项ID public long getChildId(int groupPosition, int childPosition) { return childPosition; } // 自定义方法,建立文本 public TextView buildTextView() { // 指定布局参数 AbsListView.LayoutParams param = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 35);// 创建TextView TextView textView = new TextView(this.context); textView.setLayoutParams(param); // 设置布局参数 textView.setTextSize(15.0f); // 设置文字大小 textView.setGravity(Gravity.LEFT); // 左对齐 textView.setPadding(40, 8, 3, 3); // 间距 return textView; // 返回组件 } @Override // 返回子项组件 public View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {// 创建TextView TextView textView = buildTextView(); // 设置显示文字 textView.setText(getChild(groupPosition,childPosition).toString()); return textView; } @Override // 取得子项个数 public int getChildrenCount(int groupPosition) { // 取得子项个数 return this.children[groupPosition].length; } @Override // 取得组对象 public Object getGroup(int groupPosition) { return this.groups[groupPosition]; } @Override // 取得组个数 public int getGroupCount() { return this.groups.length; } @Override // 取得组ID public long getGroupId(int groupPosition) { return groupPosition; } @Override // 取得组显示组件 public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // 建立组件 TextView textView = buildTextView();// 设置文字 textView.setText(this.getGroup(groupPosition).toString()); return textView; } @Overridepublic boolean hasStableIds() {return true; } @Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true; } }
MyExpandableListViewDemo.java
![](/assets/blank.gif)
![](/assets/blank.gif)
package org.lxh.demo; import android.app.Activity;import android.os.Bundle;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.View;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.ExpandableListView.OnGroupClickListener;import android.widget.ExpandableListView.OnGroupCollapseListener;import android.widget.ExpandableListView.OnGroupExpandListener;import android.widget.Toast; public class MyExpandableListViewDemo extends Activity {// 定义树型组件 private ExpandableListView elistview = null; // 定义适配器对象 private ExpandableListAdapter adapter = null; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 默认布局管理器 super.setContentView(R.layout.main); // 取得组件 this.elistview = (ExpandableListView) super.findViewById(R.id.elistview); // 实例化适配器 this.adapter = new MyExpandableListAdapter(this); // 设置适配器 this.elistview.setAdapter(this.adapter); // 注册上下文菜单 super.registerForContextMenu(this.elistview); // 设置子项单击事件 this.elistview.setOnChildClickListener(new OnChildClickListenerImpl()); // 设置组项单击事件 this.elistview.setOnGroupClickListener(new OnGroupClickListenerImpl()); // 关闭分组事件 this.elistview.setOnGroupCollapseListener(new OnGroupCollapseListenerImpl()); // 展开分组事件 this.elistview.setOnGroupExpandListener(new OnGroupExpandListenerImpl()); } private class OnChildClickListenerImpl implements OnChildClickListener { @Overridepublic boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {// 显示提示框 Toast.makeText( MyExpandableListViewDemo.this, "子选项被选中,groupPosition = " + groupPosition + ",childPosition = " + childPosition, Toast.LENGTH_SHORT).show(); return false; } } private class OnGroupClickListenerImpl implements OnGroupClickListener { @Overridepublic boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) {// 显示提示框 Toast.makeText(MyExpandableListViewDemo.this, "分组被选中,groupPosition = " + groupPosition, Toast.LENGTH_SHORT).show(); return false; } } private class OnGroupCollapseListenerImpl implements OnGroupCollapseListener { @Overridepublic void onGroupCollapse(int groupPosition) {// 显示提示框 Toast.makeText(MyExpandableListViewDemo.this, "关闭分组,groupPosition = " + groupPosition, Toast.LENGTH_SHORT).show(); } } private class OnGroupExpandListenerImpl implements OnGroupExpandListener { @Overridepublic void onGroupExpand(int groupPosition) {// 显示提示框 Toast.makeText(MyExpandableListViewDemo.this, "打开分组,groupPosition = " + groupPosition, Toast.LENGTH_SHORT).show(); } } @Overridepublic void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {super.onCreateContextMenu(menu, view, menuInfo); ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;// 取得操作的菜单项 int type = ExpandableListView.getPackedPositionType(info.packedPosition); // 取得菜单项所在的菜单组 int group = ExpandableListView.getPackedPositionGroup(info.packedPosition); // 取得子菜单项的索引 int child = ExpandableListView.getPackedPositionChild(info.packedPosition); // 显示提示框 Toast.makeText(MyExpandableListViewDemo.this, "type = " + type + ",group = " + group + ",child = " + child, Toast.LENGTH_SHORT).show(); }}
AndroidManifest.xml
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.lxh.demo" android:versionCode="1" android:versionName="1.0"><uses-sdk android:minSdkVersion="5" /> <application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MyExpandableListViewDemo" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity> </application></manifest>
转载于:https://www.cnblogs.com/androidsj/archive/2012/03/24/2415911.html
控件:ExpandableListView --- 树型组件相关推荐
- Vue实战篇十七:用树型组件实现一个文档目录结构
系列文章目录 Vue基础篇一:编写第一个Vue程序 Vue基础篇二:Vue组件的核心概念 Vue基础篇三:Vue的计算属性与侦听器 Vue基础篇四:Vue的生命周期(秒杀案例实战) Vue基础篇五:V ...
- flex html 控件 开源,flexlib开源组件库
ComponentList FlexLib组件列表. FlexLib组件列表 本wiki页面包含了在当前构建的flexlib中所有组件的列表.添加新组件FlexLib之后,你应该编辑这个页面,填写组件 ...
- OpenCASCADE:常用Inspector控件之树视图
OpenCASCADE:常用Inspector控件之树视图 树视图首选项 此控件显示所调查 OCCT 元素的表示层次结构,例如DFBrowser的 TDocStd_Application,请参阅概述. ...
- Qt Designer设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承,styleSheet设置样式。
话不多说,先看效果图,完美的设置背景. 如果正常设置背景的话其它的组件都会产生变化. 这是因为组件的继承. 最开始的面板就是父类,我们新增加的组件就是子类,默认都是继承的. 继承也有继承的好处. 比如 ...
- Android UI控件----ExpandableListView的基本用法
ExpandableListView介绍 ExpandableListView的引入 ExpandableListView可以显示一个视图垂直滚动显示两级列表中的条目,这不同于列表视图(ListVie ...
- 一款不错的打印控件,SailPrint打印组件简介。
SailPrint打印组件是一套VCL打印控件.目前最新版本是3.0,可以打印DBGrid,StringGrid,ListView以及直接打印数据源.SailPrint有以下几大特点: 一.SailP ...
- FineUI控件之树的应用(二)
一.Tree控件应用 <f:PageManager ID="PageManager1" runat="server" /><f:Tree ID ...
- dorado Tip控件:信息提示组件
//@Bind #operate.onClick 点击后弹出信息提示框 !function(self,arg){var tip = view.get("#tip");tip.set ...
- 封装html ui 控件,聊聊前端 UI 组件:组件设计
本文首发于欧雷流.由于我会时不时对文章进行补充.修正和润色,为了保证所看到的是最新版本,请阅读原文. 在本系列文章<聊聊前端 UI 组件:组件体系>中初步说明了 UI 组件的架构设计,本文 ...
最新文章
- HotSpot 虚拟机的算法实现
- 解决复制虚拟机时候网络不从eth0开始问题
- github关联域名,创建个人网站教程终结篇
- UWA DAY 2018 精彩议题全曝光!
- php网站漏洞检测对sql注入漏洞防护
- C++ Stacks(堆栈)
- vue实战(9):总结二
- Percona XtraDB cluster--第一部分:XtraDB cluster安装 (Centos7)
- c语言中c4700在哪个位置,C语言单链表问题。。高手来啊warning C4700
- Mysql 添加用户 授权等操作
- 是不正确的python语句_Python if语句读取不正确
- tar、tar.gz、tar.Z、tgz、bz2、bin软件包的安装
- ostringstream的使用方法
- AR 第一大单,微软 219 亿美元为美军打造高科技头盔
- 关于android studio menu键的问题
- 程序员常用资源工具集合(建议收藏)
- 【微信小程序】小程序功能开发
- mac虚拟机开发android,安卓手机原来也能安装 Windows和macOS 系统?!
- 鸿蒙系统桌面壁纸,好桌道壁纸横空出世 万千壁纸随心换
- Moonriver史上首次全球黑客松正式开启,15万美元奖金持续资助开发者建设Moonriver生态
热门文章
- /storage/emulated/0/Pictures/eWorld/1644986847.jpeg: open failed: ENOENT (No such file or directory)
- 程序猿内功—系统内存管理
- CHY Web 3 Move
- 电脑热键冲突怎么修改?Windows11热键设置更改方法
- java仿照微信聊天记录时间格式显示
- OllyDbg基础教程
- Monkey测试常用命令
- MATLAB离散函数和连续函数的绘制
- echarts HTML折线图设置
- 龙芯1B:pwm的使用例程