玩ExpandableListView遇到的坑

ExpandableListView是谷歌官方出品的。这个控件可以实现类似手风琴一样的效果,可以在listView的基础上,对每一行进行展开,可以说是listView的嵌套。

看了以上内容,我瞬间觉得这玩意高大上啊~但是实际用起来,坑太多了:

第一坑:页面多次重绘!

当这个控件的adapter加载好数据后,第一次加载页面时,就会多次重绘,也即多次调用getGroupId()、getGroup、getGroupView()等方法,然后每当展开一个group,又会多次调用child的相应方法,如:ge tChildrenCount()、getChildView()等。

各种查询,理所应当的没有人提到解决方法。最后还是红杏出墙,找到了贵人。。。感谢我大谷歌搜索,解决自家的问题还是很可靠的。。

解决方法:把ExpandableListView和group、child的宽高都设成定值,或者全部match_parent。

第二坑:方法重复调用!

解决了上述问题后,又发现不论如何ge tChildrenCount()、getChildView()最少调用两遍!!继续谷歌,有人说是官方的说法是:这俩函数只调用一遍,不能保证数据加载正确。。我擦,一次不对,两次就能对?

我的项目需要每次展开group时,都临时加载group下面的child,结果他加载两遍,搞得我总是集合下标越界。。最后实在没办法,只能创建了一个hashmap,然后多了一层循环遍历。虽然解决了问题,流畅度也嗨凑合,但是这样屎的代码哥接受不了啊?

等有时间,必然自己写一个这种效果的控件,毕竟用的地方还是蛮多的,网上已经有人写出来了,但是我还是倾向于用RecyclerView来实现。

转载于:https://my.oschina.net/JiangTun/blog/911435

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值