Android详细教程(基础篇):二十四、View组件高级篇:ExpandableListView树形组件详解

版权声明:本文为博主原创文章,转载请注明出处。作者:杨雄进 https://blog.csdn.net/makyan/article/details/89164879

7.20. ExpandableListView(树形组件)

需结合适配器BaseExpandableListAdapter完成。

示例:

配置:activity_expandable_list_view.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">

            <ExpandableListView

                       android:id="@+id/elistview"

                       android:layout_width="fill_parent"

                       android:layout_height="wrap_content" />

</LinearLayout>

Activity:

package com.makyan.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 ExpandableListViewActivity extends Activity {

            private ExpandableListView elistview = null;                              // 定义树型组件

            private ExpandableListAdapter adapter = null;                          // 定义适配器对象

            @Override

            public void onCreate(Bundle savedInstanceState) {

                       super.onCreate(savedInstanceState);

                       super.setContentView(R.layout.activity_expandable_list_view);                                           // 默认布局管理器

                       elistview = (ExpandableListView) super.findViewById(R.id.elistview);                                              // 取得组件

                       adapter = new MyExpandableListAdapter(this); // 实例化适配器

                       elistview.setAdapter(adapter);                             // 设置适配器

                       registerForContextMenu(elistview);                   // 注册上下文菜单

                       elistview.setOnChildClickListener(new OnChildClickListenerImpl());                          // 设置子项单击事件

                       elistview.setOnGroupClickListener(new OnGroupClickListenerImpl());                                  // 设置组项单击事件

                       elistview.setOnGroupCollapseListener(new OnGroupCollapseListenerImpl());                    // 关闭分组事件

                       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(

                                                          ExpandableListViewActivity.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(ExpandableListViewActivity.this,

                                                          "分组被选中,groupPosition = " + groupPosition,

                                                          Toast.LENGTH_SHORT).show();                                        // 显示提示框

                                   return false;

                       }

            }

            private class OnGroupCollapseListenerImpl implements OnGroupCollapseListener {

                       @Override

                       public void onGroupCollapse(int groupPosition) {

                                   Toast.makeText(ExpandableListViewActivity.this,

                                                          "关闭分组,groupPosition = " + groupPosition, Toast.LENGTH_SHORT)

                                                          .show();                                                                                           // 显示提示框

                       }

            }

            private class OnGroupExpandListenerImpl implements OnGroupExpandListener {

                       @Override

                       public void onGroupExpand(int groupPosition) {

                                   Toast.makeText(ExpandableListViewActivity.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(ExpandableListViewActivity.this,

                                               "type = " + type + ",group = " + group + ",child = " + child,

                                               Toast.LENGTH_SHORT).show();                                                   // 显示提示框

            }

}

Adapter:

package com.makyan.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 = {

                                   { "makyan", "二弟", "小武", "老板" },

                                   { "父亲", "母亲" }, { "刘宏伟", "刘德华", "刘媛" },

                                   { "票贩子", "造假商" } };                                                                                                  // 定义组项

            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

            public long getChildId(int groupPosition, int childPosition) {    // 取得子项ID

                       return childPosition;

            }

            public TextView buildTextView() {                                                                                  // 自定义方法,建立文本

                       AbsListView.LayoutParams param = new AbsListView.LayoutParams(

                                               ViewGroup.LayoutParams.FILL_PARENT, 35);                            // 指定布局参数

                       TextView textView = new TextView(this.context);                                            // 创建TextView

                       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 = buildTextView();                                                                // 创建TextView

                       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

            public long getGroupId(int groupPosition) {                                                                  // 取得组ID

                       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

            }

}

猜你喜欢

转载自blog.csdn.net/makyan/article/details/89164879