ExpandableListView的使用总结

本文详细介绍了Android中ExpandableListView组件的使用方法,包括判断组是否展开、设置组间的分割线与图标、收起指定组等基本操作,并通过实例展示了如何实现父级列表的弹出与关闭事件监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重要方法:
isGroupExpanded (int groupPosition);//判断此组是否展开
expandableListView.setDivider();//这个是设定每个Group之间的分割线。
expandableListView.setGroupIndicator();//这个是设定每个Group之前的那个图标。
expandableListView.collapseGroup(int group);//将第group组收起

ExpandableListTest

package com.android.expand;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import com.example.TypeTest.R;

public class ExpandableListTest extends Activity {
    //记录上次展开的父组件下标,方便关闭
    private int lastPoint;
    private ExpandableListView listView;
    public ExpandInfoAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list);
        listView = (ExpandableListView) findViewById(R.id.expandable_list_view);
        adapter = new ExpandInfoAdapter(this);
        listView.setAdapter(adapter);
        //监听父列表的弹出事件
        listView.setOnGroupExpandListener(new ExpandableListViewListenerC());
        //监听父列表的关闭事件
        listView.setOnGroupCollapseListener(new ExpandableListViewListenerB());
        //监听子列表
        listView.setOnChildClickListener(new ExpandableListViewListenerA());

    }
    /**
     * 监听子级列表的点击事件
     *
     * @author Administrator
     */
    public class ExpandableListViewListenerA implements ExpandableListView.OnChildClickListener {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub
            return false;
        }
    }

    /**
     * 监听父级列表的关闭事件事件
     *
     * @author Administrator
     */
    public class ExpandableListViewListenerB implements ExpandableListView.OnGroupCollapseListener {

        @Override
        public void onGroupCollapse(int groupPosition) {
            // TODO Auto-generated method stub

        }
    }

    /**
     * 监听父级列表的弹出事件
     *
     * @author Administrator
     */
    public class ExpandableListViewListenerC implements ExpandableListView.OnGroupExpandListener {
        @Override
        public void onGroupExpand(int groupPosition) {
            // TODO Auto-generated method stub
            if (lastPoint != groupPosition) {
                listView.collapseGroup(lastPoint);
                lastPoint = groupPosition;
            }
        }
    }

}
ExpandInfoAdapter
package com.android.expand;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.*;
import android.widget.*;
import com.example.TypeTest.R;

import java.util.ArrayList;
import java.util.List;

public class ExpandInfoAdapter extends BaseExpandableListAdapter {
    LayoutInflater mInflater;
    Bitmap mIcon1;
    Context context;
    public List<String> group;
    public List<List<String>> child;
    public final static String NAME = "姓名:";
    public final static String PHONE = "电话:";
    public final static String SEX = "性别:";

    public ExpandInfoAdapter(Activity a) {
        context = a;
        mInflater = LayoutInflater.from(context);
        mIcon1 = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher);
        initialOther();
        addItemByValue("张三", "051782214", "男");
        addItemByValue("李四", "110", "男");
        addItemByValue("王二", "132", "女");
        addItemByValue("麻子", "13321234562", "女");
    }

    // child's stub
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return child.get(groupPosition).get(childPosition);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return child.get(groupPosition).size();
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

        return getView(groupPosition, childPosition, convertView, parent);
    }


    public View getView(int groupPosition, int childPosition, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.icon = (ImageView) convertView.findViewById(R.id.icon);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        String name = child.get(groupPosition).get(childPosition);
        holder.text.setText(name);
        holder.icon.setImageBitmap(mIcon1);
        return convertView;
    }

    @Override
    public Object getGroup(int groupPosition) {
        return group.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return group.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        LinearLayout parentLayout = (LinearLayout) View.inflate(context, R.layout.list_item, null);
        TextView parentTextView = (TextView) parentLayout.findViewById(R.id.parentitem);
        parentTextView.setText(getGroup(groupPosition).toString());
        ImageView parentImageViw = (ImageView) parentLayout.findViewById(R.id.arrow);
        //判断isExpanded就可以控制是按下还是关闭,同时更换图片
        if (isExpanded) {
            parentImageViw.setBackgroundResource(R.drawable.arrow2);
        } else {
            parentImageViw.setBackgroundResource(R.drawable.arrow1);
        }
        return parentLayout;

    }

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

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


    static class ViewHolder {
        TextView text;
        ImageView icon;
    }

    public void initialOther() {
        group = new ArrayList<String>();
        child = new ArrayList<List<String>>();
    }

    public void addItemByValue(String n, String c1, String c2) {
        group.add(n);
        List<String> item = new ArrayList<String>();
        item.add(NAME + n);
        item.add(PHONE + c1);
        item.add(SEX + c2);
        child.add(item);
    }

}
源码链接 http://download.youkuaiyun.com/detail/zztigyk/6540609


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值