ListView的item折叠功能实现,使用ExpandableListView

本文介绍了一种使用Android中的ExpandableListView实现可展开列表的方法。通过一个具体的示例展示了如何创建父子项,并使用BaseExpandableListAdapter进行适配。此外,还讨论了在面试中关于显示/隐藏ListView项目的常见问题。

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

来酷狗面试的时候面试官问过我,如果要显示/隐藏ListView的某个Item项目中的某些内容,我会怎么做。

我当时的回答是,做一个布局文件里面把所有要用到的项目都写上,哪个不需要了就将他设为gone就可以了。

今天在看代码的时候发现,原来有ExpandableListView这个东西,很明显,我当时的回答有点太浅层次了。

ExpandableListView见名知意,专门用于实现可收缩的ListView,即其中的item有父子item。实现的效果大致如下,使用ExpandableListView来做父子Item实现起来相当容易。


ExpandableListView使用ExpandableListAdapter来做为其适配器,ExpandableListAdapter也有其基础适配器BaseExpandableListAdapter;

具体代码如下:

package com.wallj.listviewdemo;

import android.R.color;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class ExpandableListViewDemo extends Activity {
	ExpandableListView mExpdListView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_expandable_list_view_demo);
		mExpdListView = (ExpandableListView) findViewById(R.id.exListView);
		mExpdListView.setAdapter(mExAdapter);
	}
	ExpandableListAdapter mExAdapter = new BaseExpandableListAdapter() {
		private String[] generalsTypes = new String[] { "魏", "蜀", "吴" };
		private String[][] generals = new String[][] {
                { "夏侯惇", "甄姬", "许褚", "郭嘉", "司马懿", "杨修" },
                { "马超", "张飞", "刘备", "诸葛亮", "黄月英", "赵云" },
                { "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" }

        };
		
		@Override
		public boolean isChildSelectable(int arg0, int arg1) {
			return false;
		}
		
		@Override
		public boolean hasStableIds() {
			return true;
		}
		
		@Override
		public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) {
			if(arg2 == null){
				arg2 = new TextView(ExpandableListViewDemo.this);
				((TextView)arg2).setTextSize(30);
			}
			((TextView)arg2).setText(generalsTypes[arg0]);
			return arg2;
		}
		
		@Override
		public long getGroupId(int arg0) {
			return arg0;
		}
		
		@Override
		public int getGroupCount() {
			return generalsTypes.length;
		}
		
		@Override
		public Object getGroup(int arg0) {
			return generalsTypes[arg0];
		}
		
		@Override
		public int getChildrenCount(int arg0) {
			return generals[arg0].length;
		}
		
		@Override
		public View getChildView(int arg0, int arg1, boolean arg2, View arg3,
				ViewGroup arg4) {
			if(arg3 == null){
				arg3 = new TextView(ExpandableListViewDemo.this);
			}
			((TextView)arg3).setText(generals[arg0][arg1]);
			return arg3;
		}
		
		@Override
		public long getChildId(int arg0, int arg1) {
			return arg1;
		}
		
		@Override
		public Object getChild(int arg0, int arg1) {
			return generals[arg0][arg1];
		}
	};

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值