onTouchListener 到 RecyclerView 已禁用其滚动

Siv*_*al 1 xml android kotlin

我有一个可水平滚动的 recyclerView,当在任何地方触摸 recyclerView 时,应该发生下拉列表。我已经尝试了很多方法,比如 onclick,但没有奏效。唯一有效的是onTouchListener,但是在实现滚动不起作用之后。

这是 recyclerView 代码

<android.support.v7.widget.RecyclerView
        android:id="@+id/rv_selected_groups"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="16dp"
        android:layout_marginStart="16dp"
        android:clickable="true"
        android:layout_marginTop="0dp"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingBottom="8dp"
        android:paddingTop="8dp"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/iv_dropdown"
        app:layout_constraintTop_toBottomOf="@id/tv_select_group"
        android:focusable="true" />
Run Code Online (Sandbox Code Playgroud)

这是使用的 onTouchListener 的代码

 mRecyclerViewSeletedGroups.setOnTouchListener(View.OnTouchListener { view, motionEvent ->
        when (motionEvent.action){
            MotionEvent.ACTION_UP -> {
                dropdownFlag = !dropdownFlag
                mPresenterImpl.onDropdownClicked(dropdownFlag)
            }
        }
        return@OnTouchListener true
    })
Run Code Online (Sandbox Code Playgroud)

因此,当我尝试使用 onclick 而不是 onTouch 时,它不起作用。

我想实现 onTouch 以及滚动应该工作。

我该如何解决这个问题?

And*_*usa 6

问题出在你的:

return@OnTouchListener true
Run Code Online (Sandbox Code Playgroud)

如果你总是返回 true 这意味着:

如果侦听器已经消费了事件,则为真,否则为假。

如果您总是使用该事件,则您的滚动条将不起作用。您需要检查逻辑以仅在需要时返回true