Я использую оформление элемента для своего повторного просмотрщика для реализации липкого заголовка, где, как и в обратном вызове onDraw, я попытаюсь получить ближайший заголовок для текущего верхнего дочернего элемента, если нет, то ничего не будет делать
ItemDecoration класс
class StickyHeaderItemDecoration constructor() : RecyclerView.ItemDecoration() {
private lateinit var mListener: StickyHeader
private var mStickyHeaderHeight = 0
override fun onDrawOver(canvas: Canvas, parent: RecyclerView, state: RecyclerView.State) {
super.onDrawOver(canvas, parent, state)
if (parent.adapter !is StickyHeader) {
return
}
if (!::mListener.isInitialized) {
mListener = parent.adapter as StickyHeader
}
val topChild = parent.getChildAt(0) ?: return
val topChildPosition = parent.getChildAdapterPosition(topChild) // somtimes this gives me wrong a position
if (topChildPosition == RecyclerView.NO_POSITION) {
return
}
val headerPos = mListener.getHeaderPositionFor(topChildPosition)
val currentHeader = getHeaderViewForItem(headerPos, parent)
if (currentHeader != null) {
fixLayoutSize(parent, currentHeader)
val contactPoint = currentHeader.bottom
val childInContact = getChildInContact(parent, contactPoint, headerPos)
if (childInContact != null && mListener.isHeaderView(
parent.getChildAdapterPosition(
childInContact
)
)
) {
moveHeader(canvas, currentHeader, childInContact)
return
}
drawHeader(canvas, currentHeader)
}
}
}
в чем заключается моя проблема с ошибкой topChildPosition
в вышеприведенном коде, иногда, когда я добавляю элементы в окне переработчика, кто-нибудь может мне помочь с этим, пожалуйста?