RecyclerView прокручивает только при касании определенного вида - PullRequest
1 голос
/ 24 октября 2019

Интересно, как мне добиться такого поведения RecyclerView, чтобы я мог прокручивать список только тогда, когда я щелкаю и перетаскиваю только определенный вид в пределах ViewHolder?

Я отключил горизонтальную прокруткусоздав свой собственный LinearLayoutManager:

class MyOwnLayoutManager : LinearLayoutManager {

constructor(context: Context?) : super(context)
constructor(context: Context?, orientation: Int, reverseLayout: Boolean) : super(context, orientation, reverseLayout)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes)

private var isScrollEnabled = false

fun setScrollEnabled(isEnabled: Boolean) {
    isScrollEnabled = isEnabled
}

override fun canScrollVertically(): Boolean {
    return isScrollEnabled && super.canScrollVertically()
}

override fun canScrollHorizontally(): Boolean {
    return isScrollEnabled && super.canScrollHorizontally()
}
}

Затем я пытаюсь изменить isScrollEnabled, установив для слушателя касания заголовок элемента:

 item_header.setOnTouchListener { v, event ->
            val isScrolling = event.action == ACTION_MOVE
            onHeaderIsDragging.invoke(isScrolling)
            false
        }

Обратный вызов во фрагменте, который изменяетсяменеджер компоновки адаптеров var:

private val onHeaderIsDragging: ((Boolean) -> Unit) = {
    recyclerViewLayoutManager.setScrollEnabled(it)
}

В этой реализации MOTION_CANCEL после пары событий MOTION_MOVE в onTouchListener и RecyclerView не прокручивается после событий MOTION_MOVE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...