取消选择 RecyclerView 单元格,但点击它之外的任何地方
Posted
技术标签:
【中文标题】取消选择 RecyclerView 单元格,但点击它之外的任何地方【英文标题】:Deselect RecyclerView cell but tapping anywhere outside of it 【发布时间】:2021-06-01 10:16:03 【问题描述】:我有一个线性布局,其中包含三个水平滚动的 recylerview。当用户在其中一个回收器视图中点击一个单元格时,它被“突出显示”并处于选定状态。当用户点击它之外的任何地方时,我需要取消选择此单元格。
我尝试将 onClickListener 添加到父 LinearLayout 视图,但不是每次都被点击。我还尝试在回收站视图上添加一个视图,其中 Framelayout 作为 LinearLayout 和 View 的父布局,但这阻止了用户滚动视图。
我也尝试过使用android:descendantFocusability
,但如果可行的话,我无法让它工作。
任何建议将不胜感激。
XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/parent_timeline_layout"
android:layout_
android:layout_
android:gravity="center"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_1"
....
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_2"
....
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view_3"
....
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</LinearLayout>
【问题讨论】:
【参考方案1】:我想出的解决方案是将 onTouchListeners 添加到每个 recyclerView 以及基础 rootView。然后我为每个人实现了SimpleOnGestureListener
,以了解何时触发了一次点击,而不仅仅是任何触摸。这意味着滚动正常执行!
CustomGestureClass:
internal class RecyclerViewGesture : SimpleOnGestureListener()
override fun onDown(e: MotionEvent): Boolean
return true
override fun onSingleTapConfirmed(e: MotionEvent): Boolean
unselectAllCells.postValue(true)
return false
然后在片段中我创建了一个类的实例
recyclerViewDetector = GestureDetectorCompat(context!!, RecyclerViewGesture())
然后我使用了onTouchListener
然后返回了手势
myRecyclerView.setOnTouchListener p0, event ->
recyclerViewDetector!!.onTouchEvent(event)
我为每个回收站视图创建了三个,然后为根视图使用了 onclickListener。我使用 MutableLiveData 值发布到任何 Gestures/OnClick 击中并取消选择观察者中的所有单元格时
unselectAllCells.observe(this, Observer
if(unselectAllCells.value!!)
unselectAnyGraphicalImageCell()
)
希望有一天这可以为某人减轻痛苦!
【讨论】:
以上是关于取消选择 RecyclerView 单元格,但点击它之外的任何地方的主要内容,如果未能解决你的问题,请参考以下文章
在第二次点击时取消选择 UICollectionView 单元格