[英]Can't map a viewgroup children
為什么地圖在此視圖組兒童列表中不起作用?
class DivisorItem(context: Context): RecyclerView.ItemDecoration() {
private val mDivisor: Drawable? = ContextCompat.getDrawable(context, R.drawable.item_divisor)
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
val left = parent.paddingLeft
val right = parent.width - parent.paddingRight
parent.children.map {
val params = it.layoutParams as RecyclerView.LayoutParams
val top = it.bottom + params.bottomMargin
val bottom = top + mDivisor!!.intrinsicHeight
mDivisor.setBounds(left, top, right, bottom)
mDivisor.setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN)
mDivisor.draw(c)
}
}
}
該視圖組中有4個視圖,但從不輸入地圖塊
我找到了解決方案... parent.children是序列
我打開源並找到它:
val ViewGroup.children: Sequence<View>
get() = object : Sequence<View> {
override fun iterator() = this@children.iterator()
}
我認為這是不變的...在上面的代碼中,我發現了相同的來源
operator fun ViewGroup.iterator() = object : MutableIterator<View> {
private var index = 0
override fun hasNext() = index < childCount
override fun next() = getChildAt(index++) ?: throw IndexOutOfBoundsException()
override fun remove() = removeViewAt(--index)
}
所以我將代碼更改為:
parent.iterator().forEach {
val params = it.layoutParams as RecyclerView.LayoutParams
val top = it.bottom + params.bottomMargin
val bottom = top + mDivisor!!.intrinsicHeight
mDivisor.setBounds(left, top, right, bottom)
mDivisor.setColorFilter(Color.GRAY, PorterDuff.Mode.SRC_IN)
mDivisor.draw(c)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.