控件:ExpandableListView --- 树型组件_第1张图片

控件:ExpandableListView --- 树型组件_第2张图片

控件:ExpandableListView --- 树型组件_第3张图片

main.xml

View Code
<?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 (适配器)

View Code
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;
}

@Override
public boolean hasStableIds() {
return true;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}

}

MyExpandableListViewDemo.java

View Code
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;

@Override
public 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 {
@Override
public 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 {

@Override
public 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 {

@Override
public void onGroupCollapse(int groupPosition) {
// 显示提示框
Toast.makeText(MyExpandableListViewDemo.this,
"关闭分组,groupPosition = " + groupPosition,
Toast.LENGTH_SHORT).show();
}

}

private class OnGroupExpandListenerImpl implements OnGroupExpandListener {

@Override
public void onGroupExpand(int groupPosition) {
// 显示提示框
Toast.makeText(MyExpandableListViewDemo.this,
"打开分组,groupPosition = " + groupPosition,
Toast.LENGTH_SHORT).show();
}
}
@Override
public 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

View Code
<?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>

控件:ExpandableListView --- 树型组件_第4张图片



更多相关文章

  1. 四大组件之一 ----------- BroadcastReceiver (短信拦截)
  2. Android拖动控件改变其位置
  3. android 遍历所有控件
  4. Android学习--动态向SPinner控件中添加数据
  5. Top Android App使用的组件 2
  6. Android在代码中设置控件的drawableLeft,drawableRight,drawableTo

随机推荐

  1. C# 数据操作系列 - 17 Dapper ——号称可
  2. 【asp.net core 系列】6 实战之 一个项目
  3. C# 数据操作系列 - 18 让Dapper更强的插
  4. C# 数据操作系列 - 19 FreeSql 入坑介绍
  5. 【asp.net core】7 实战之 数据访问层定
  6. 【asp.net core 系列】8 实战之 利用 EF
  7. 【asp.net core 系列】 1 带你了解一下as
  8. 【Java Spring Cloud 实战之路】- 3. 添
  9. 【asp.net core 系列】9 实战之 UnitOfWo
  10. 【asp.net core 系列】10 实战之ActionFi