ListView折叠展开demo(使用expendsListView第三方包和网上的一些例子都不好使,自己写了一个)

本文详细介绍了如何在Android应用中实现ListView点击展开与收起的功能,并提供了自定义解决方案,包括使用自定义适配器和点击监听事件来控制视图的可见性。

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

背景:最近有个需求是要实现ListView点击展开,再次点击收起这样一个效果,同时,任何一个时刻都只允许一个ListView展开,展开后,里面的button等能够获得焦点并能响应其他事件的处理。

实现过程:首选网上的第三方jar:expendsListView,demo实现没有问题,放到项目中挂掉!放弃!

   系统自带的ExpandableListView,发现这个做出来的效果和实际要实现的效果有差距,放弃!

     因为原理也简单,就是在点击item后更新adapter并让隐藏的view可见,使用gone,自己写了个demo,下面上效果图,不会动滴~~!


主要的原理就是给头部布局设置点击事件,点击之后显示,之后又隐藏,具体getView的代码贴在下面

		@Override
		public View getView(final int position, View convertView,
				ViewGroup parent) {
			ViewHolder holder = null;
			FlightInfo flightInfo = infos.get(position);
			if (convertView == null) {
				holder = new ViewHolder();
				convertView = View.inflate(MainActivity.this,
						R.layout.cabin_more_item, null);
				holder.cabin = (TextView) convertView
						.findViewById(R.id.tv_cabin);
				holder.discount = (TextView) convertView
						.findViewById(R.id.zhekou);
				holder.price = (TextView) convertView
						.findViewById(R.id.tv_price);
				holder.setNum = (TextView) convertView
						.findViewById(R.id.tv_seatnum);

				holder.rl_title = (RelativeLayout) convertView
						.findViewById(R.id.rl_title);
				
				holder.ll_footer = (LinearLayout) convertView
						.findViewById(R.id.ll_footer);
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}

			if (currentItem == position) {
				holder.ll_footer.setVisibility(View.VISIBLE);
			} else {
				holder.ll_footer.setVisibility(View.GONE);
			}
			holder.rl_title.setOnClickListener(new OnClickListener() {

				@Override
				public void onClick(View v) {
					int tag = (Integer) v.getTag();
					if (tag == currentItem) {
						currentItem = -1;
					} else {
						currentItem = tag;
					}
					adapter.notifyDataSetChanged();
				}
			});
			holder.cabin.setText(flightInfo.getCabin());
			holder.discount.setText(flightInfo.getDiscount());
			holder.price.setText(flightInfo.getPrice());
			holder.setNum.setText(flightInfo.getSeatNum());
			holder.rl_title.setTag(position);
			return convertView;
		}

最终实现了功能!!不过这个是调用adapter.notifyDataSetChanged();来实现的,如果条目过多效率也会有问题,写过一个用handler来更新position对应的布局的,那个demo回头找找上传!

代码不会传!下午看看再传上来。

下载地址



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值