簡體   English   中英

無法映射視圖組子級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM