没有子级的 ExpandableListView 抛出 indexOutOfBoundsException
Posted
技术标签:
【中文标题】没有子级的 ExpandableListView 抛出 indexOutOfBoundsException【英文标题】:ExpandableListView with no children throws indexOutOfBoundsException 【发布时间】:2020-10-10 22:44:04 【问题描述】:我有一个ExpandableListView
,其中有些组有孩子,有些没有,我需要做的是只扩展有孩子的组。
body
数组元素的一部分是空的,因此,我得到一个 IndexOutOfBoundsException
class ExpandableInnerCartAdapter(
var context: Context,
var expandableListView: ExpandableListView,
var header: MutableList<Cart>,
val isTerminadoFragment:Boolean
) : BaseExpandableListAdapter()
val map = SparseBooleanArray()
var body: List<List<String>> = listOf()
override fun getGroup(groupPosition: Int): Cart
return header[groupPosition]
override fun isChildSelectable(groupPosition: Int, childPosition: Int): Boolean
return true
override fun hasStableIds(): Boolean
return false
fun getCart(): MutableList<Cart> = header
fun getCheckedArray():SparseBooleanArray = map
override fun getGroupView(
groupPosition: Int,
isExpanded: Boolean,
convertView: View?,
parent: ViewGroup?
): View
var convertView = convertView
if(convertView == null)
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
convertView = inflater.inflate(R.layout.layout_group,null)
val item = header[groupPosition]
body = listOf(item.optionList)
expandableListView.expandGroup(groupPosition)
expandableListView.setGroupIndicator(null)
convertView.item_name.text = item.productName
return convertView
override fun getChildrenCount(groupPosition: Int): Int
return body[groupPosition].size
override fun getChild(groupPosition: Int, childPosition: Int): Any
return body[groupPosition][childPosition]
override fun getGroupId(groupPosition: Int): Long
return groupPosition.toLong()
override fun getChildView(
groupPosition: Int,
childPosition: Int,
isLastChild: Boolean,
convertView: View?,
parent: ViewGroup?
): View
var convertView = convertView
if(convertView == null)
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
convertView = inflater.inflate(R.layout.layout_child,null)
if(getChildrenCount(groupPosition) > 0)
val title = convertView?.findViewById<TextView>(R.id.tv_title)
title?.text = "Opción $childPosition+1 -> $getChild(groupPosition,childPosition)"
return convertView!!
override fun getChildId(groupPosition: Int, childPosition: Int): Long
return childPosition.toLong()
override fun getGroupCount(): Int
return header.size
当没有小组有孩子并尝试这样做时,似乎会发生错误
expandableListView.expandGroup(groupPosition)
我已尝试使用 if 语句解决此问题:
if(body.isNotEmpty())
expandableListView.expandGroup(groupPosition)
但是这个解决方案不起作用。
如何避免没有孩子的群体?
谢谢
【问题讨论】:
【参考方案1】:当您使用 Kotlin 时,您可以使用许多有用的扩展功能。其中之一是filter
,当然您可以为其指定条件。
解决方案是从您设置为新 body
值的列表中过滤掉空数组:
body = listOf(item.optionList).filter it.isNotEmpty()
过滤函数定义可见here。
【讨论】:
以上是关于没有子级的 ExpandableListView 抛出 indexOutOfBoundsException的主要内容,如果未能解决你的问题,请参考以下文章
使用 RecyclerView 作为 ExpandableListView 的子级
为 expandablelistview 的子级创建单独的 onClick() 方法
css父级没包住子级是怎么回事,我用firebug查看,确实在父级的div中,但是就是没有包括子级的内容
setSizePolicy() 与 QSizePolicy.Expanding 不起作用:子级没有扩展到父级的大小
使用具有 FutureBuilder 作为子级的 StatefulWidget List 显示没有数据,直到我热重新加载然后立即调用没有数据的未来