• ExpandableListView的简单案例


    ExpandableListView介绍:

     长话短说,ExpandableListView就是ListView的扩展。像QQ好友分组列表。看下面的效果图,就知道了。

    效果图:

     

    ExpandableListView有几个属性值得一说:

    android:childDivider

    来分离子列表项的图片或者是颜色。注:图片不会完全显示,分离子列表项的是一条直线

    android:childIndicator

    在子列表项旁边显示的指示符。注:可以是一个图片

    android:childIndicatorLeft

    子列表项指示符的左边约束位置。注:即从左端0位置开始计数,比如,假设指示符是一个图标,给定这个属性值为3dip,则表示从左端起3dip开始显示此图标。

    android:childIndicatorRight

    子列表项指示符的右边约束位置。注:表示右端到什么位置结束

    android:groupIndicator

    在组列表项旁边显示的指示符。注:可以是一个图片,如果不想要指示器可以设置为@null。

    android:indicatorLeft

    组列表项指示器的左边约束位置。注:表示左端从什么位置开始(测试了下,在android 4.4的模拟器下没效果)。

    android:indicatorRight

    组列表项指示器的右边约束位置。注:表示右端到什么位置结束(测试了下,在android 4.4的模拟器下没效果)。

    代码:

    package cn.datian.expandablelistviewtest2;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.TextView;
    import android.widget.Toast;
    
    @SuppressLint("NewApi")
    public class MainActivity extends Activity {
    
        /**
         * 子类的数据集合
         */
        private List<List<String>> childrenList;
        /**
         * 组集合
         */
        private List<String> groupList;
        
        private ExpandableListView eListView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initDate();
            eListView = (ExpandableListView) this.findViewById(R.id.eListView);
            eListView.setAdapter(adapter);
            //展开第一组,调用了expandGroup(4,false);
            eListView.expandGroup(0);
            //下标从0开始,展开第五组,为true表示滚动到第五组的位置。
    //        eListView.expandGroup(4,true);
            
            eListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v,
                        int groupPosition, long id) {
                    Toast.makeText(MainActivity.this, "你点击了:"+groupList.get(groupPosition),Toast.LENGTH_SHORT).show();
                    return false;
                }
            });
            
            //点击组下的子条目监听
            eListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
                
                @Override
                public boolean onChildClick(ExpandableListView parent, View v,
                        int groupPosition, int childPosition, long id) {
                    Toast.makeText(MainActivity.this, "你点击了:"+childrenList.get(groupPosition).get(childPosition), Toast.LENGTH_SHORT).show();
                    return true;
                }
            });
        }
    
        /**
         * 初始化数据
         */
        private void initDate() {
            
            childrenList = new ArrayList<List<String>>();
            groupList = new ArrayList<String>();
            
            addDate("小学","张三");
            addDate("中学","李四");
            addDate("高中","王五");
            addDate("大学","赵六");
            addDate("硕士","小红");
            addDate("博士","小明");
            addDate("博士后","大明");
            
        }
    
        private void addDate(String group, String chlidren) {
            
            groupList.add(group);
            List<String> cs = new ArrayList<String>();
            for(int i = 0;i < 10;i++){
                cs.add(chlidren+i);
            }
            childrenList.add(cs);
        }
        
        
        
        BaseExpandableListAdapter adapter = new BaseExpandableListAdapter() {
            
            
            /**
             * 返回true,表明子条目是可选的。
             */
            @Override
            public boolean isChildSelectable(int groupPosition, int childPosition) {
                Log.i("adpter", "isChildSelectable");
                return true;
            }
            
            @Override
            public boolean hasStableIds() {
                Log.i("adpter", "hasStableIds");
                return false;
            }
            
            @Override
            public View getGroupView(int groupPosition, boolean isExpanded,
                    View convertView, ViewGroup parent) {
                
                Log.i("adpter", "getGroupView");
                View v = View.inflate(MainActivity.this, R.layout.group_item,null);
                
                TextView tv=  (TextView) v.findViewById(R.id.tv);
                tv.setText(groupList.get(groupPosition));
                tv.setPadding(20, 0, 0, 0);
                return v;
            }
            
            @Override
            public long getGroupId(int groupPosition) {
                Log.i("adpter", "getGroupId");
                return groupPosition;
            }
            
            @Override
            public int getGroupCount() {
                Log.i("adpter", "getGroupCount");
                return groupList.size();
            }
            
            @Override
            public Object getGroup(int groupPosition) {
                Log.i("adpter", "getGroup");
                return groupList.get(groupPosition);
            }
            
            @Override
            public int getChildrenCount(int groupPosition) {
                Log.i("adpter", "getChildrenCount");
                return childrenList.get(groupPosition).size();
            }
            
            @Override
            public View getChildView(int groupPosition, int childPosition,
                    boolean isLastChild, View convertView, ViewGroup parent) {
                Log.i("adpter", "getChildView");
                TextView tv = new TextView(MainActivity.this);
                tv.setText(childrenList.get(groupPosition).get(childPosition));
                tv.setPadding(20, 0, 0, 0);
                return tv;
            }
            
            @Override
            public long getChildId(int groupPosition, int childPosition) {
                Log.i("adpter", "getChildId");
                return childrenList.get(groupPosition).size();
            }
            
            @Override
            public Object getChild(int groupPosition, int childPosition) {
                Log.i("adpter", "getChild");
                return childrenList.get(groupPosition).get(childPosition);
            }
        };
    }

     layout布局:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         >
    
        <ExpandableListView 
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/eListView"
            android:groupIndicator="@drawable/expandable_indicator_selector"
            android:indicatorLeft="5dp"
            android:indicatorRight="30dp"
            ></ExpandableListView>
    </RelativeLayout>

     layout组条目布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:layout_margin="10dp"
        >
        <TextView 
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text=""
            android:textSize="20sp"
            android:layout_marginLeft="40dp"
            android:gravity="center_vertical"
            />
    </LinearLayout>
    android:groupIndicator="@drawable/expandable_indicator_selector" : 使用选择器

    选择器代码:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_expanded="true" android:drawable="@drawable/contract" />   
        <item android:drawable="@drawable/expand"></item> 
    </selector>
  • 相关阅读:
    【模板】字符串匹配的三种做法(Hash、KMP、STL)
    《为了你我愿意热爱整个世界》书评
    将.bat文件设置成windows服务(解决odi代理开机自动启动的问题)
    Oracle学习笔记 -- 内存结构
    Oracle学习笔记 -- 前言
    在实验静态块等时遇到到关于main函数的问题
    关于main方法调用main方法的问题
    关于静态块、静态属性、构造块、构造方法的执行顺序
    l​e​f​t​ ​j​o​i​n​ ​o​n​ ​a​n​d​与​l​e​f​t​ ​j​o​i​n​ ​o​n​ ​w​h​e​r​e​的​区​别(转载)
    Oracle中的正则表达式(REPLACE 和REGEXP_REPLACE)---转载自http://database.51cto.com/art/201009/228270.htm
  • 原文地址:https://www.cnblogs.com/datian/p/3797080.html
Copyright © 2020-2023  润新知