Android之ExpandableListView(树形组件)的使用方法

原文地址 :http://blog.sina.com.cn/s/blog_9dbea139010127cb.html


test的效果图:
Android之ExpandableListView(树形组件)的使用方法

Android之ExpandableListView(树形组件)的使用方法


第一步:定义一个适配器类ExpandableAdapter继承BaseExpandableListAdapter这个类:

代码如下:
package net.loonggg.expandable;

import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapte r;
import android.widget.TextView;

public class ExpandableAdapter extends BaseExpandableListAdapte r {
private String[] groups = new String[] { "我的好友", "家人", "同事", "黑名单" };
private String[][] child = new String[][] {
{ "张三", "李四", "王五", "赵六", "宋七" }, { "loonggg", "timmy", "哥哥" },
{ "比尔盖茨", "乔布斯", "巴菲特" }, { "苏丹红", "敌敌畏" } };
private Context context;

public ExpandableAdapter(Context context) {
this.context = context;
}

@Override
public int getGroupCount() { // 取得组的个数
return groups.length;
}

@Override
public int getChildrenCount(int groupPosition) { // 取得子项个数
return child[groupPosition].length;
}

@Override
public Object getGroup(int groupPosition) { // 取得组对象
return groups[groupPosition];
}

@Override
public Object getChild(int groupPosition, int childPosition) { // 取得指定的子项
return child[groupPosition][childPosition];
}

@Override
public long getGroupId(int groupPosition) { // 取得组id
return groupPosition;
}

@Override
public long getChildId(int groupPosition, int childPosition) { // 取得子项id
return childPosition;
}

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

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView tv = buildTextView();
tv.setText(getGroup(groupPosition).toString());
return tv;
}

@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView tv = buildTextView();
tv.setText(getChild(groupPosition, childPosition).toString());
return tv;
}

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

private TextView buildTextView() {
AbsListView.LayoutParams params = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 35);
TextView tv = new TextView(context);
tv.setTextSize(15);
tv.setGravity(Gravity.LEFT);
tv.setLayoutParams(params);
tv.setPadding(40, 5, 5, 10);
return tv;
}
}
第二步:设置布局文件main.xml
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:orientation="vertical" >

      <ExpandableListView
            android:id="@+id/elistView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

</LinearLayout>
第三步:MainActivity
代码如下:
package net.loonggg.expandable;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
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 MainActivity extends Activity {
private ExpandableListView elistView; // 定义树型组件

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
elistView = (ExpandableListView) findViewById(R.id.elistView);
registerForContextMenu(elistView); // 给树形组件注册绑定上下文对象
elistView.setAdapter(new ExpandableAdapter(this)); // 绑定适配器组件
elistView.setOnGroupClickListener(new OnGroupClickListenerImpl ());// 设置组项单击事件

elistView.setOnGroupExpandListener (new OnGroupExpandListenerImp l()); // 展开分组事件
elistView.setOnGroupCollapseListen er(new OnGroupCollapseListenerI mpl());// 关闭分组事件
elistView.setOnChildClickListener(new OnChildClickListenerImpl ()); // 设置子项单击事件

}

private class OnChildClickListenerImpl  implements OnChildClickListener {

@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
Toast.makeText(
MainActivity.this,
"groupPosition " + groupPosition + " childPosition "
+ childPosition, 1).show();
return false;
}

}

private class OnGroupClickListenerImpl  implements OnGroupClickListener {

@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {
Toast.makeText(MainActivity.this, "groupPosition " + groupPosition,
1).show();
return false;
}

}

private class OnGroupExpandListenerImp l implements OnGroupExpandListener {

@Override
public void onGroupExpand(int groupPosition) {
Toast.makeText(MainActivity.this, "打开组", 1).show();
}

}

private class OnGroupCollapseListenerI mpl implements
OnGroupCollapseListener {

@Override
public void onGroupCollapse(int groupPosition) {
Toast.makeText(MainActivity.this, "关闭组", 1).show();
}

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
ExpandableListView.ExpandableListContextMen uInfo info = (ExpandableListView.ExpandableListContextMen uInfo) menuInfo;
int type = ExpandableListView
.getPackedPositionType(info.packedPosition); // 取得操作的菜单项
int group = ExpandableListView
.getPackedPositionGroup(info.packedPosition); // 取得菜单项所在的菜单组
int child = ExpandableListView
.getPackedPositionChild(info.packedPosition); // 取得子菜单项的索引
Toast.makeText(MainActivity.this,
"type = " + type + ",group = " + group + ",child = " + child,
Toast.LENGTH_SHORT).show(); // 显示提示框
if (type == 0 && child == -1) {
menu.setHeaderTitle("信息操作");
menu.add(menu.NONE, menu.FIRST + 1, 1, "联系人详情");
menu.add(menu.NONE, menu.FIRST + 2, 2, "拨打电话");
menu.add(menu.NONE, menu.FIRST + 3, 3, "发送短信");
menu.add(menu.NONE, menu.FIRST + 4, 4, "查看信箱");
menu.add(menu.NONE, menu.FIRST + 5, 5, "链接网站");
} else {
menu.setHeaderTitle("信息操作");
menu.add(menu.NONE, menu.FIRST + 6, 1, "联系人详情");
menu.add(menu.NONE, menu.FIRST + 7, 2, "拨打电话");
menu.add(menu.NONE, menu.FIRST + 8, 3, "发送短信");
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值