`
LoveZhou
  • 浏览: 272477 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android折叠列表 ExpandableList

阅读更多
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;
		}
	}
}
  • 大小: 17.2 KB
分享到:
评论
9 楼 junzh0536 2014-12-28  
可以多个层次吗  现在是两层次
8 楼 androidsina 2012-08-24  
很是感谢。。。。。。。。。。。。。。。。。
7 楼 carlzhao531 2012-05-22  
帮到我了~多谢博主~
6 楼 ashank 2012-03-23  
so cool
5 楼 ron.luo 2012-01-30  
不错,正需要!
4 楼 ron.luo 2012-01-30  
不过,正需要!
3 楼 yulincqupt 2012-01-07  
呵呵不错 MARK
2 楼 lvzhenzhang 2011-11-24  
试试看!  
1 楼 pcq019 2011-10-31  
 

相关推荐

    安卓Android源码——expandableList扩展列表.zip

    这个“安卓Android源码——expandableList扩展列表.zip”压缩包包含了一个示例项目,用于帮助开发者理解并实现ExpandableListView的使用。下面将详细介绍这个组件及其相关知识点。 1. **ExpandableListView概述** ...

    Android代码-expandableList扩展列表.zip

    在Android开发中,ExpandableListView是一个非常重要的控件,它允许用户展示可展开和折叠的子列表项,常用于创建层级结构清晰、交互性强的界面,如目录树、菜单等。这个"Android代码-expandableList扩展列表.zip...

    Android源码——expandableList扩展列表.zip

    在Android开发中,ExpandableListView是一个非常重要的组件,它允许我们展示可以展开和折叠的子列表,这样的布局在展示层次结构数据时非常有用,比如菜单、目录或组织结构。在这个"Android源码——expandableList...

    安卓Android源码——expandableList.rar

    在Android开发中,ExpandableListView是一个非常常用的控件,它允许用户展示可展开和折叠的子项列表,常用于创建层级结构清晰、交互性强的界面。这个“安卓Android源码——expandableList.rar”文件很可能包含了一个...

    安卓Android源码——expandableList1.rar

    在Android开发中,ExpandableListView是一个非常重要的控件,它允许用户展示可展开和折叠的子列表项,常用于创建层级结构清晰的列表。在这个"安卓Android源码——expandableList1.rar"压缩包中,我们可以找到一个...

    安卓Android源码——ExpandableList(二级树的构造).zip

    ExpandableListView是Android SDK提供的一种特殊的ListView,它可以显示可展开/折叠的子列表项。每个父列表项下可以有多个子列表项,通过点击父列表项来控制其子项的可见性。 2. **数据模型** 在实现...

    Android expandableList扩展列表.zip

    "Android expandableList扩展列表.zip"是一个包含源码和说明的资源包,旨在帮助开发者更好地理解和使用ExpandableListView。 源码说明可能涵盖了以下关键知识点: 1. **ExpandableListAdapter**:这是...

    Android expandableList扩展列表.rar

    `Android expandableList扩展列表.rar`文件中的内容可能包含了如何在Android应用中实现和优化ExpandableListView的详细教程。 首先,让我们了解一下ExpandableListView的基本用法。在Android中,使用...

    Android通过ExpandableList、环形进度条实现上传页面

    首先,`ExpandableList`是Android提供的一个可折叠的列表视图,它允许子项被分组并可以展开或折叠。在这个场景下,我们可以用它来组织上传状态的三个类别:上传成功、正在上传和未上传。每个类别作为一个父项,而...

    Android expandableList扩展列表.zip源码资源下载

    这个"Android expandableList扩展列表.zip"源码资源提供了一个关于如何在Android应用中有效地使用ExpandableListView的实例。 首先,`ExpandableListView`继承自`AdapterView`,它是通过适配器(Adapter)来填充...

    Android应用源码之ExpandableList(二级树的构造)_构造.zip

    在Android开发中,ExpandableList(可展开列表)是一种常用的数据展示组件,它允许用户以树形结构来显示数据,通常用于实现具有层级关系的数据视图。本资料包中的源码着重探讨了如何构建二级树形结构的...

    Android应用源码之expandableList.zip

    在Android开发中,ExpandableListView是一个非常重要的控件,它允许用户展示可展开和折叠的列表项,通常用于展示层次结构的数据。这个"Android应用源码之expandableList.zip"包含了一个关于如何使用...

    Android应用源码之expandableList1_expandableList.zip

    在Android开发中,ExpandableListView是一个非常重要的控件,它允许用户展示数据集,并且以可折叠/展开的形式呈现,通常用于构建层次结构清晰的列表。这个`Android应用源码之expandableList1_expandableList.zip`...

    Android expandableList扩展列表-IT计算机-毕业设计.zip

    在"Android expandableList扩展列表-IT计算机-毕业设计.zip"这个压缩包中,包含了一个关于如何使用和定制ExpandableListView的源码示例,这对于计算机科学专业的学生进行毕业设计是很有帮助的。 1. **...

    Android应用源码之expandableList1.zip

    在Android开发中,ExpandableListView是一个非常重要的控件,它允许用户展示可展开和折叠的子项列表。这个"Android应用源码之expandableList1.zip"提供的源码实例可以帮助我们深入理解如何在实际项目中使用这个控件...

Global site tag (gtag.js) - Google Analytics