zoukankan      html  css  js  c++  java
  • android 可展开(收缩)的列表ListView(ExpandableListView)

    每天都在用QQ聊天,今天突然一想,android怎么实现列表的分组展开呢?看了看api,发现其实现过程也很简单。先看一下最终效果吧!

    1、首先创建我们的Activity,继承 android.app.ExpandableListActivity,直接看代码吧。

    package com.ideasandroid.sample;
    import android.app.ExpandableListActivity;
    import android.os.Bundle;
    import com.ideasandroid.sample.adapter.IdeasExpandableListAdapter;
     
    /**
     * @author IdeasAndroid
     * 可展开(收缩)列表示例
     */
    public class IdeasExpandableListView extends ExpandableListActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //设置列表适配器IdeasExpandableListAdapter
            setListAdapter(new IdeasExpandableListAdapter(this));
        }
    }

    2、创建适配器,继承android.widget.BaseExpandableListAdapter。

    package com.ideasandroid.sample.adapter;
     
    import java.util.ArrayList;
    import java.util.List;
    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;
     
    /**
     * @author IdeasAndroid 
     * 可展开(收缩)列表示例
     */
    public class IdeasExpandableListAdapter extends BaseExpandableListAdapter {
     
            private Context mContext = null;
            // 测试数据,开发时可能来自数据库,网络....
            private String[] groups = { "家人", "朋友", "同事" };
            private String[] familis = { "老爸", "老妈", "妹妹" };
            private String[] friends = { "小李", "张三", "李四" };
            private String[] colleagues = { "陈总", "李工", "李客户" };
     
            private List<String> groupList = null;
            private List<List<String>> itemList = null;
     
            public IdeasExpandableListAdapter(Context context) {
                    this.mContext = context;
                    groupList = new ArrayList<String>();
                    itemList = new ArrayList<List<String>>();
                    initData();
            }
     
            /**
             * 初始化数据,将相关数据放到List中,方便处理
             */
            private void initData() {
                    for (int i = 0; i < groups.length; i++) {
                            groupList.add(groups[i]);
                    }
                    List<String> item1 = new ArrayList<String>();
                    for (int i = 0; i < familis.length; i++) {
                            item1.add(familis[i]);
                    }
     
                    List<String> item2 = new ArrayList<String>();
                    for (int i = 0; i < friends.length; i++) {
                            item2.add(friends[i]);
                    }
     
                    List<String> item3 = new ArrayList<String>();
                    for (int i = 0; i < colleagues.length; i++) {
                            item3.add(colleagues[i]);
                    }
     
                    itemList.add(item1);
                    itemList.add(item2);
                    itemList.add(item3);
            }
     
            public boolean areAllItemsEnabled() {
                    return false;
            }
     
            /*
             * 设置子节点对象,在事件处理时返回的对象,可存放一些数据
             */
            public Object getChild(int groupPosition, int childPosition) {
                    return itemList.get(groupPosition).get(childPosition);
            }
     
            public long getChildId(int groupPosition, int childPosition) {
                    return childPosition;
            }
     
            /*
             * 字节点视图,这里我们显示一个文本对象
             */
            public View getChildView(int groupPosition, int childPosition,
                            boolean isLastChild, View convertView, ViewGroup parent) {
                    TextView text = null;
                    if (convertView == null) {
                            text = new TextView(mContext);
                    } else {
                            text = (TextView) convertView;
                    }
                    // 获取子节点要显示的名称
                    String name = (String) itemList.get(groupPosition).get(childPosition);
                    // 设置文本视图的相关属性
                    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                                    ViewGroup.LayoutParams.FILL_PARENT, 40);
                    text.setLayoutParams(lp);
                    text.setTextSize(18);
                    text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
                    text.setPadding(45, 0, 0, 0);
                    text.setText(name);
                    return text;
            }
     
            /*
             * 返回当前分组的字节点个数
             */
            public int getChildrenCount(int groupPosition) {
                    return itemList.get(groupPosition).size();
            }
     
            /*
             * 返回分组对象,用于一些数据传递,在事件处理时可直接取得和分组相关的数据
             */
            public Object getGroup(int groupPosition) {
                    return groupList.get(groupPosition);
            }
     
            /*
             * 分组的个数
             */
            public int getGroupCount() {
                    return groupList.size();
            }
     
            public long getGroupId(int groupPosition) {
                    return groupPosition;
            }
     
            /*
             * 分组视图,这里也是一个文本视图
             */
            public View getGroupView(int groupPosition, boolean isExpanded,
                            View convertView, ViewGroup parent) {
                    TextView text = null;
                    if (convertView == null) {
                            text = new TextView(mContext);
                    } else {
                            text = (TextView) convertView;
                    }
                    String name = (String) groupList.get(groupPosition);
                    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
                                    ViewGroup.LayoutParams.FILL_PARENT, 40);
                    text.setLayoutParams(lp);
                    text.setTextSize(18);
                    text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
                    text.setPadding(36, 0, 0, 0);
                    text.setText(name);
                    return text;
            }
     
            /*
             * 判断分组是否为空,本示例中数据是固定的,所以不会为空,我们返回false 
             * 如果数据来自数据库,网络时,可以把判断逻辑写到这个方法中,如果为空
             * 时返回true
             */
            public boolean isEmpty() {
                    return false;
            }
     
            /*
             * 收缩列表时要处理的东西都放这儿
             */
            public void onGroupCollapsed(int groupPosition) {
     
            }
     
            /*
             * 展开列表时要处理的东西都放这儿
             */
            public void onGroupExpanded(int groupPosition) {
     
            }
     
            /*
             * Indicates whether the child and group IDs are stable across changes to
             * the underlying data.
             */
            public boolean hasStableIds() {
                    return false;
            }
     
            /*
             * Whether the child at the specified position is selectable.
             */
            public boolean isChildSelectable(int groupPosition, int childPosition) {
                    return true;
            }
    }

    IdeasExpandableListView.rar

    转:http://www.apkbus.com/android-54271-1-1.html

  • 相关阅读:
    解决html中刷新页面后checkbox还选中的问题
    初始化spring容器的几种方法
    在web.xml中配置spring配置文件的路径
    查找算法
    排序算法
    ORACLE TO_CHAR,TO_DATE函数格式说明
    ORACLE TO_DATE函数
    ORACLE SUBSTR函数
    ORACLE学习笔记
    Linux 查看端口占用情况
  • 原文地址:https://www.cnblogs.com/gzggyy/p/3101721.html
Copyright © 2011-2022 走看看