看看今天实现的
Android中个多级列表的功能,其实这就是一个小组件,但是如果用好了,可以实现很大的功能呢!接着,有点累,什么都不说了,看看看实现的过程就可以了,挺简单的!
2.接着看看主活动mainActivity.java
3.主活动的实现需要一个适配器,myExpendableadapler.java
4.接着就可以看看实现的效果了:
1.看看布局文件main.xml文件
- <?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"
- android:background="@drawable/bg"
- >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="那些上过与即将被上的大学课程:"
- android:textColor="#FF6100"
- android:textSize="20dp"
- />
- <ExpandableListView
- android:id="@+id/elistview"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="5dp"
- />
- </LinearLayout>
- package com.wang;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.ContextMenu;
- import android.view.View;
- import android.view.Window;
- import android.view.WindowManager;
- import android.view.ContextMenu.ContextMenuInfo;
- import android.widget.ExpandableListAdapter;
- import android.widget.ExpandableListView;
- import android.widget.Toast;
- import android.widget.ExpandableListView.OnChildClickListener;
- import android.widget.ExpandableListView.OnGroupClickListener;
- import android.widget.ExpandableListView.OnGroupCollapseListener;
- import android.widget.ExpandableListView.OnGroupExpandListener;
- public class MaintActivity extends Activity {
- // 创建一个上下文菜单的方法
- public void onCreateContextMenu(ContextMenu menu, View v,
- ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, v, menuInfo);
- // 一个垂直滚动的两级列表。取得菜单项
- ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;
- // 获得这个类型 的位置
- int type = ExpandableListView
- .getPackedPositionType(info.packedPosition);
- // 取得所在组的索引
- int group = ExpandableListView
- .getPackedPositionGroup(info.packedPosition);
- // 取得子菜单的索引
- int child = ExpandableListView
- .getPackedPositionGroup(info.packedPosition);
- Toast.makeText(MaintActivity.this,
- "类型 =" + type + " 分组:" + group + " 子选项:" + child,
- Toast.LENGTH_LONG).show();
- }
- private ExpandableListView eListView = null;
- private ExpandableListAdapter adapter = null;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- // 去除标题,
- this.requestWindowFeature(Window.FEATURE_NO_TITLE);
- // 取消状态栏,充满全屏
- this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);
- super.onCreate(savedInstanceState);
- super.setContentView(R.layout.main);
- // 实例化组件
- this.eListView = (ExpandableListView) findViewById(R.id.elistview);
- // 声明一个adapter对象
- adapter = new myExpendableadapler(this);
- // 设置适配器提供了数据
- this.eListView.setAdapter(this.adapter);
- // 注册一个上下文菜单显示给定的视图(多个视图可以显示上下文菜单)。
- super.registerForContextMenu(this.eListView);
- // 设置点击时候触发的事件 1,子选项点击事件 2。父选项单击事件 3.分组打开事件 4.分组关闭事件
- this.eListView.setOnChildClickListener(new ChildClickListener());
- this.eListView.setOnGroupClickListener(new GroupClickListener());
- this.eListView.setOnGroupExpandListener(new GroupExpandListener());
- this.eListView.setOnGroupCollapseListener(new GroupCollapseListener());
- }
- // /1,子选项点击事件
- private class ChildClickListener implements OnChildClickListener {
- public boolean onChildClick(ExpandableListView parent, View v,
- int groupPosition, int childPosition, long id) {
- Toast
- .makeText(
- MaintActivity.this,
- "子选项被选中,所的组:" + groupPosition + " 子选项的位置:"
- + childPosition, Toast.LENGTH_LONG).show();
- return false;
- }
- }
- // 2。父选项单击事件
- private class GroupClickListener implements OnGroupClickListener {
- public boolean onGroupClick(ExpandableListView parent, View v,
- int groupPosition, long id) {
- Toast.makeText(MaintActivity.this, "分组选项被选中,所在组: " + groupPosition,
- Toast.LENGTH_LONG).show();
- return false;
- }
- }
- // 3.分组打开事件
- private class GroupExpandListener implements OnGroupExpandListener {
- public void onGroupExpand(int groupPosition) {
- // TODO Auto-generated method stub
- Toast.makeText(MaintActivity.this, "打开分组,所在组:" + groupPosition,
- Toast.LENGTH_LONG).show();
- }
- }
- // 4.分组关闭事件
- private class GroupCollapseListener implements OnGroupCollapseListener {
- public void onGroupCollapse(int groupPosition) {
- Toast.makeText(MaintActivity.this, "关闭分组,所在组:" + groupPosition,
- Toast.LENGTH_LONG).show();
- }
- }
- }
- package com.wang;
- 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;
- public class myExpendableadapler extends BaseExpandableListAdapter {
- // 组名称
- private String[] group = new String[] { "专业课", "公共课", "选修课", "选逃课" };
- // 子选项的名字
- private String[][] child = new String[][] {
- { "C语言", "java程序设计基础教程", "数据库原理与应用", "数据结构", "linux下的嵌入式C语言编程",
- "linux桌面应用程序设计", "计算机操作系统", "计算机组成原理" },
- { "大学英语", "马克思哲学原理", "形势与政策", "ARM体系结构", "嵌入式软件开发", "软件工程" },
- { "音乐鉴赏", "市场营销", "android开发与应用", "Visual C++实用教程", "算法分析与程序设计" },
- { "马克思哲学原理", "形势与政策" } };
- private Context context = null;
- // 构造函数
- public myExpendableadapler(Context context) {
- this.context = context;
- }
- public Object getChild(int groupPosition, int childPosition) {
- return this.child[groupPosition][childPosition];
- }
- public long getChildId(int groupPosition, int childPosition) {
- return childPosition;
- }
- private TextView buildTextView() {
- //LayoutParams AbsListView扩展提供一个位置来保存视图类型。
- AbsListView.LayoutParams params = new AbsListView.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT, 40);
- TextView textView = new TextView(this.context);
- textView.setLayoutParams(params);
- //大小
- textView.setTextSize(15.0f);
- textView.setGravity(Gravity.LEFT+3);
- textView.setPadding(40, 8, 3, 3);
- return textView;
- }
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- TextView textView = new TextView(this.context);
- //得到每组的子选项并转换成字符串
- textView.setText(this.getChild(groupPosition, childPosition).toString());
- return textView;
- }
- //统计子选项的个数
- public int getChildrenCount(int groupPosition) {
- // TODO Auto-generated method stub
- return this.child[groupPosition].length;
- }
- //得到复选项的位置
- public Object getGroup(int groupPosition) {
- // TODO Auto-generated method stub
- return this.group[groupPosition];
- }
- //得到复选项的个数
- public int getGroupCount() {
- // TODO Auto-generated method stub
- return this.group.length;
- }
- //得到复选项的id
- public long getGroupId(int groupPosition) {
- // TODO Auto-generated method stub
- return groupPosition;
- }
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- TextView textView = this.buildTextView();
- textView.setText(this.getGroup(groupPosition).toString());
- return textView;
- }
- //是否子选项和父选项id是稳定在改变底层数据。
- public boolean hasStableIds() {
- // TODO Auto-generated method stub
- return true;
- }
- //p判断子选项是否可以选择
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- // TODO Auto-generated method stub
- return true;
- }
- }