Der Sticky-Header selbst ist eine horizontale RecyclerView und enthält anklickbare Elemente. Ich stehe jedoch vor einem Problem: Die horizontale RecyclerView verarbeitet keine Berührungsereignisse, einschließlich Klicks und Scrolls.
Das habe ich bisher getan:
Implementierte eine benutzerdefinierte ItemDecoration-Klasse, um Sticky-Header zu verarbeiten.
Verwendete parent.addOnItemTouchListener(), um zu versuchen, Berührungsereignisse abzufangen.
Es wurde versucht, TouchDelegate hinzuzufügen, um Berührungsereignisse an die Horizontale zu übergeben RecyclerView.
Leider hat keiner dieser Ansätze das Problem gelöst und der Sticky-Header reagiert weiterhin nicht auf Benutzerinteraktionen.
Code: Select all
class HeaderItemDecoration(
parent: RecyclerView,
private val shouldFadeOutHeader: Boolean = false,
private val isHeader: (itemPosition: Int) -> Boolean
) : RecyclerView.ItemDecoration() {
private var currentHeader: Pair? = null
init {
parent.adapter?.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onChanged() {
// clear saved header as it can be outdated now
currentHeader = null
}
})
parent.doOnEachNextLayout {
// clear saved layout as it may need layout update
currentHeader = null
}
// handle click on sticky header
// parent.addOnItemTouchListener(object : RecyclerView.SimpleOnItemTouchListener() {
// override fun onInterceptTouchEvent(
// recyclerView: RecyclerView,
// motionEvent: MotionEvent
// ): Boolean {
// return if (motionEvent.action == MotionEvent.ACTION_DOWN) {
// motionEvent.y contactPoint) {
if (mBounds.top = 0)
return headerPosition
}
}
inline fun View.doOnEachNextLayout(crossinline action: (view: View) -> Unit) {
addOnLayoutChangeListener { view, _, _, _, _, _, _, _, _ ->
action(
view
)
}
}
Jeder hat eine Idee, wie man das Scrollen in einem Sticky-Header aktiviert.