zoukankan      html  css  js  c++  java
  • 可扩展的listview--Expandablelistview

    layout.xml

    <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"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ExpandableListView 
            android:id="@+id/expandable_lv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></ExpandableListView>
    
    </RelativeLayout>

    expandable_childe_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <TextView 
            android:id="@+id/child_text"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"/>
        
    </LinearLayout>

    expandable_group_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <TextView 
            android:id="@+id/group_text"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"/>
        
    </LinearLayout>

    main.java

    package com.example.day09_expandablelistview;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseExpandableListAdapter;
    import android.widget.ExpandableListView;
    import android.widget.ExpandableListView.OnGroupCollapseListener;
    import android.widget.ExpandableListView.OnGroupExpandListener;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        private int lastGroupPosition = -1;
        private ExpandableListView expandable_lv;
        private String groupData[] = {"同事","老师","朋友"};
        private String childData[][] = {{"小小","小明","饭饭","流浪"},{"李老师","张老师","吴老师","肖老师","柳老师"},{"雯雯","哔哔","嘻嘻"}};
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            expandable_lv = (ExpandableListView) findViewById(R.id.expandable_lv);
            //给ExpandableListAdapter设置适配器---自定义适配器需要继承BaseExpandableListAdapter()实现其中的方法
            MyExpandableListAdapter myExpandableListAdapter = new MyExpandableListAdapter();
            //设置适配器
            expandable_lv.setAdapter(myExpandableListAdapter);
            //去掉group默认的箭头
            expandable_lv.setGroupIndicator(null);
            //设置组可拉伸的监听器,拉伸时会调用其中的onGroupExpand()方法
            expandable_lv.setOnGroupExpandListener(new OnGroupExpandListener() {
                
                @Override
                public void onGroupExpand(int groupPosition) {
                    /**
                     * 实现打开只能打开一个组的功能,打开一个组,已将打开的组会自动收缩
                     */
                    if(lastGroupPosition != groupPosition){
                        expandable_lv.collapseGroup(lastGroupPosition);
                    }
                    lastGroupPosition  = groupPosition;
                }
            });
            //设置组收缩的监听器,收缩时会调用其中的onGroupCollapse()方法
            expandable_lv.setOnGroupCollapseListener(new OnGroupCollapseListener() {
                
                @Override
                public void onGroupCollapse(int groupPosition) {
                    
                }
            });
        }
        /**
         * 自定义实现类继承BaseExpandandableListAdapter
         * @author my
         *
         */
        class MyExpandableListAdapter extends BaseExpandableListAdapter{
            /**
             * 得到组的数量
             */
            @Override
            public int getGroupCount() {
                return groupData.length;
            }
            /**
             * 得到每个组的元素的数量
             */
            @Override
            public int getChildrenCount(int groupPosition) {
                return childData[groupPosition].length;
            }
            /**
             * 获得组的对象
             */
            @Override
            public Object getGroup(int groupPosition) {
                return groupData[groupPosition];
            }
            /**
             * 获得子对象
             */
            @Override
            public Object getChild(int groupPosition, int childPosition) {
                return childData[groupPosition][childPosition];
            }
            /**
             * 得到组id
             */
            @Override
            public long getGroupId(int groupPosition) {
                return groupPosition;
            }
            /**
             * 得到子id
             */
            @Override
            public long getChildId(int groupPosition, int childPosition) {
                return childPosition;
            }
            /**
             * 表示数据是否稳定,对监听事件有影响
             */
            @Override
            public boolean hasStableIds() {
                return true;
            }
            /**
             * 确定一个组的展示视图--groupPosition表示的当前需要展示的组的索引
             */
            @Override
            public View getGroupView(int groupPosition, boolean isExpanded,
                View convertView, ViewGroup parent) {
                LayoutInflater systemService =  (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View view = systemService.inflate(R.layout.enpandable_group_item, null);
                TextView group_text = (TextView) view.findViewById(R.id.group_text);
                group_text.setText(groupData[groupPosition]);
                return view;
            }
            /**
             * 确定一个组的一个子的展示视图--groupPostion表示当前组的索引,childPosition表示的是需要展示的子的索引
             */
            @Override
            public View getChildView(int groupPosition, int childPosition,
                boolean isLastChild, View convertView, ViewGroup parent) {
                LayoutInflater systemService = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View view = systemService.inflate(R.layout.enpandable_child_item, null);
                TextView child_text = (TextView) view.findViewById(R.id.child_text);
                child_text.setText(childData[groupPosition][childPosition]);
                return view;
            }
    
            @Override
            public boolean isChildSelectable(int groupPosition, int childPosition) {
                return false;
            }
            
        }
    
    }

     

  • 相关阅读:
    JQuery 介绍
    转载:World class Software
    how to get domain user info from AD in C#
    抽象类与接口的实际应用{百分百的重点}
    设计模式学习笔记
    百度前端笔试面试7个试题
    虚函数在C#中的用法
    设计模式学习MVC实践
    VMware 创建私有网络试验室
    设计模式学习单件模式
  • 原文地址:https://www.cnblogs.com/fangg/p/5743488.html
Copyright © 2011-2022 走看看