ExpandableList 是折叠列表,通过继承ExpandableListActivity 类就可以非常简单的实现折叠列表。

效果图:

代码实现

package com.zhou.activity;

import android.app.ExpandableListActivity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.Gravity;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.view.ContextMenu.ContextMenuInfo;

import android.widget.AbsListView;

import android.widget.BaseExpandableListAdapter;

import android.widget.ExpandableListAdapter;

import android.widget.ExpandableListView;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.ExpandableListView.ExpandableListContextMenuInfo;

public class ExpandableList extends ExpandableListActivity {

//声明adapter

private ExpandableListAdapter mAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//设这标题

setTitle("可扩展的列表");

//实例化adapter

mAdapter = new MyExpandableListAdapter();

//为列表设置adapter

setListAdapter(mAdapter);

//为list注册context菜单

registerForContextMenu(this.getExpandableListView());

}

@Override

public boolean onChildClick(ExpandableListView parent, View v,

int groupPosition, int childPosition, long id) {

Toast.makeText(this, " 组元素索引: " + groupPosition + " 子元素索引: " + childPosition, Toast.LENGTH_SHORT).show();

return super.onChildClick(parent, v, groupPosition, childPosition, id);

}

@Override

public void onGroupExpand(int groupPosition) {

Toast.makeText(this, " 组元素索引: " + groupPosition, Toast.LENGTH_SHORT).show();

super.onGroupExpand(groupPosition);

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

menu.setHeaderTitle("上下文菜单");

menu.add(0, 0, 0, "单击我");

}

// 单击上下文菜单后的逻辑

@Override

public boolean onContextItemSelected(MenuItem item) {

ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();

String title = ((TextView) info.targetView).getText().toString();

int type = ExpandableListView.getPackedPositionType(info.packedPosition);

if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {

int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);

int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);

Toast.makeText(this, title + " 组元素索引: " + groupPos + " 子元素索引: " + childPos, Toast.LENGTH_SHORT).show();

return true;

} else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {

int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);

Toast.makeText(this, title + " 组元素索引: " + groupPos, Toast.LENGTH_SHORT).show();

return true;

}

return false;

}

//自定义Adapter

public class MyExpandableListAdapter extends BaseExpandableListAdapter {

// 父列表数据

private String[] groups =

{

"吉林省",

"辽宁省",

"黑龙江省",

"山东省"

};

// 子列表数据

private String[][] children =

{

{ "长春市" },

{ "沈阳市", "铁岭市" },

{ "哈尔滨市", "齐齐哈尔市", "牡丹江市" },

{ "济南市", "青岛市", "淄博市", "潍坊市" }

};

@Override

public Object getChild(int groupPosition, int childPosition) {

return children[groupPosition][childPosition];

}

@Override

public long getChildId(int groupPosition, int childPosition) {

return childPosition;

}

@Override

public int getChildrenCount(int groupPosition) {

return children[groupPosition].length;

}

// 取子列表中的某一项的 View

@Override

public View getChildView(int groupPosition, int childPosition,

boolean isLastChild, View convertView, ViewGroup parent) {

TextView textView = getGenericView();

textView.setText(getChild(groupPosition, childPosition).toString());

return textView;

}

@Override

public Object getGroup(int groupPosition) {

return groups[groupPosition];

}

@Override

public int getGroupCount() {

return groups.length;

}

@Override

public long getGroupId(int groupPosition) {

return groupPosition;

}

// 取父列表中的某一项的 View

@Override

public View getGroupView(int groupPosition, boolean isExpanded,

View convertView, ViewGroup parent) {

TextView textView = getGenericView();

textView.setText(getGroup(groupPosition).toString());

return textView;

}

@Override

public boolean hasStableIds() {

return true;

}

@Override

public boolean isChildSelectable(int groupPosition, int childPosition) {

return true;

}

// 获取某一项的 View 的逻辑

private TextView getGenericView() {

AbsListView.LayoutParams lp = new AbsListView.LayoutParams(

ViewGroup.LayoutParams.FILL_PARENT, 48);

TextView textView = new TextView(ExpandableList.this);

textView.setLayoutParams(lp);

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);

textView.setPadding(32, 0, 0, 0);

return textView;

}

}

}

android 二级折叠列表,Android折叠列表 ExpandableList相关推荐

  1. android二级菜单ui,Android UI 之实现多级树形列表TreeView示例

    所谓TreeView就是在Windows中常见的多级列表树,在Android中系统只默认提供了ListView和ExpandableListView两种列表,最多只支持到二级列表的实现,所以如果想要实 ...

  2. android二级菜单实现,Android编程实现二级下拉菜单及快速搜索的方法

    本文实例讲述了Android编程实现二级下拉菜单及快速搜索的方法.分享给大家供大家参考,具体如下: 一.我们要做什么? 上面有个搜索框,下面是一个二级下拉菜单. 输入查询内容,下面列表将显示查询结果. ...

  3. android二级联动购物车,Android实现二级购物车的全选加反选、总价功能

    本文实例为大家分享了Android实现二级购物车的全选加反选.总价的具体代码,供大家参考,具体内容如下 MainActivity import android.support.v7.app.AppCo ...

  4. java列表展开折叠,Android在开发中的实用技巧之ExpandableListView简单实现商品列表折叠...

    根据已上线的app里总结出来的实用小技巧 一.简介 在日常开发,有可能会遇到需要一些可以展开的列表,比如QQ的好友列表.但是,用Android的该怎么做呢?其实在我没有接触过ExpandableLis ...

  5. android二级列表展开,ExpandableListView控件实现二级列表

    效果图如下: 二级列表附有点击事件. 1.布局文件: 此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Th ...

  6. 我的Android进阶之旅------Android二级ListView列表的实现

    实现如下图所示的二级列表效果 首先是在布局文件中,布局两个ListView,代码如下: <LinearLayout xmlns:android="http://schemas.andr ...

  7. android 横向多级列表,Android实现横向二级菜单

    本文实例为大家分享了Android二级横向菜单的实现过程.效果如上图: 这种横向的二级菜单在很多的app都有所应用.效果看起来还是非常的美观的.也算是项目需要,自己也就学了一下这个效果,首先说一下逻辑 ...

  8. android 二级联动列表,Linkage-RecyclerView

    软件简介 Linkage-RecyclerView 是一款基于 MVP 架构开发的二级联动列表控件.它是因 "RxJava 魔法师" 这个项目的需求而存在. 在最初寻遍了 GitH ...

  9. 仿美团列表android,android 仿美团二级菜单

    [实例简介] [实例截图] [核心代码] package com.example.meituandemo; import java.util.ArrayList; import com.example ...

最新文章

  1. MySQL编码引发的两个问题
  2. 【Android开发】布局管理器-线性布局
  3. Android MVVM 架构应用实现
  4. 魔法一样隔空在屏幕写字,捏起手指就能实现!在线可玩
  5. PAT甲级1068 Find More Coins (30 分):[C++题解]DP、背包问题、dp输出方案
  6. 一道面试题:用shell写一个从1加到100的程序
  7. php 获取坐标api,怎么获取百度坐标api返回的json格式字符串或对象呢
  8. centos6.5搭建流媒体服务器
  9. “乌木”到底是何物?它是怎样形成的?为何总能卖出天价?
  10. 电池技术为什么如此高深莫测,以至于一直是手机等相关行业的短板?
  11. impdp 不兼容_oracle - Oracle:使用impdp导入数据库转储时出错:Data Pump客户端与数据库版本12.1.0.2.0不兼容 - 堆栈内存溢出...
  12. cesium模型不遮挡点线面_VueCLI3.0干货系列之集成Cesium三维地球框架
  13. Java静态代理详解
  14. 【FXCG】美国加息缩表在即,人民币仍创新高
  15. Backtrader量化平台教程(五)Signal
  16. js 拉勾网效果_js仿拉勾网首页穿墙广告效果
  17. WINRAR5.0破解
  18. 理解涡流--电磁炉只能加热铁磁性物质(磁化)
  19. winform 三层(BLL.DAL.MODEL)
  20. 文献阅读 Learning Meta Face Recognition in Unseen Domains 2020 CVPR

热门文章

  1. 使用komodo运行python文件
  2. python SQLite数据库基本操作
  3. android更改卡刷代码,[备忘]Android线刷包转卡刷包制作过程
  4. 面向探究的合作学习——WebQuest
  5. [书]x86汇编语言:从实模式到保护模式 -- 第15章 任务切换
  6. Problem C. L04-03 n阶勒让德多项式的值(递归)---初学简单版
  7. 基于python的MongoDB入门教程
  8. 制作启动U盘;重装MacOS
  9. 智慧城市渔友云智能水产养殖系统
  10. 51单片机入门——数字时钟