kotlin中ExpandableListView无法设置adapter?
很长时间没有使用 ExpandableListView 了,kotlin 也上手使用了很长时间,前几天业务重构时候,想使用 ExpandableListView 来实现新的展开模式,但是却发现没法给 ExpandableListView 设置适配器了,一度怀疑是 Android 源码出 bug 了,时隔多年,又在作什么妖众所周知,ExpandableListView 的 adapter 需要继承
很长时间没有使用 ExpandableListView 了,kotlin 也上手使用了很长时间,前几天业务重构时候,想使用 ExpandableListView 来实现新的展开模式,但是却发现没法给 ExpandableListView 设置适配器了,一度怀疑是 Android 源码出 bug 了,时隔多年,又在作什么妖
众所周知,ExpandableListView 的 adapter 需要继承 BaseExpandableListAdapter,并实现其中的一大坨方法
但是我们给 ExpandableListView 的 adapter 赋值的时候,却报错了
mExpandableListView.adapter = mBaseExpandableListAdapter
/**
* This overloaded method should not be used, instead use
* {@link #setAdapter(ExpandableListAdapter)}.
* <p>
* {@inheritDoc}
*/
@Override
public void setAdapter(ListAdapter adapter) {
throw new RuntimeException(
"For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of " +
"setAdapter(ListAdapter)");
}
以上为 ExpandableListView 的 setAdapter 的源码,可以看到,这是重写的 ListView 的 setAdapter 方法,ExpandableListView 是继承 ListView 的
从源码可以清晰的看出,需要传进去 ListAdapter
然后看了一下 BaseExpandableListAdapter 的父类,居然没有 ListAdapter。
这,,,
然后仔细看了下抛出的异常提示:For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of setAdapter(ListAdapter)
意思是用另一个接收 ExpandableListAdapter 的重载来代替 当前这个
翻官方文档
果然
那为什么之前用 java,一直没有出现过这个问题呢?
kotlin 中,直接 mExpandableListView.adapter 自动调用的是重写的父类的 setAdapter,他接收的是 ListAdapter 参数
而他的另一个,接收 ExpandableListAdapter 的方法,则需要写成 mExpandableListView.setAdapter()
至此,问题解决

关注这个公众号92元充100话费、可以每天领外卖、买菜优惠券,便宜的电影票、还有联通校园卡500两年,200分钟国内通话/月,20G全国流量/月+20G北京校园区域流量/月。
更多推荐



所有评论(0)