【发布时间】:2017-12-30 13:10:04
【问题描述】:
是否可以使RecyclerView 不可点击?我想要这个是因为我的RecyclerView 只是在可点击 CardView 中显示一些小图标。因此,如果有人点击图标,它应该只点击(并动画)父 CardView。
我尝试了以下方法:
recyclerView.setClickable(false);recyclerView.setFocusable(false);- 扩展
RecyclerView并使onTouchEvent(MotionEvent)返回false。 - 使用上面的方法3,在
RecyclerView适配器中使用itemView.setClickable(false);。这有效,点击被发送给父母。但是,现在RecyclerView不再可滚动。 - 在膨胀的列表项 XML 中设置
clickable="false"、focusable="false"、focusableInTouchMode="false"。 (见评论 @Ibrahim) - 致电
recyclerView#setLayoutFrozen(true)和itemView.setClickable(false);。这可行,但与 #4 有相同的问题。
任何想法如何禁用RecyclerView 的点击事件并将其传递给父视图?请注意,RecyclerView 仍然需要可滚动(水平)。
编辑:
用户@c.dunlap 建议将 OnClick 侦听器设置为图标,并将单击“重定向”到父级的单击操作。这会起作用,但父视图上不会有点击动画。如果有人在 itemView 之外点击 - 但仍在 RecyclerView 内(例如 ItemDecoration 填充) - 则不会检测到点击。所以不幸的是,这不是一个解决方案。
【问题讨论】:
-
适配器的代码是什么?
-
@VladoPandžić 适配器确实没有什么特别之处。它像往常一样膨胀布局。
onBindViewHolder(...)中的唯一代码是将 Drawable 设置为ImageView。 -
您是否尝试在膨胀的布局 xml 中设置
clickable、focusable和 focusableontouchmode false? -
@Ibrahim 刚试过,没用。
-
还可以尝试 clickable="false"、focusable="false"、focusableInTouchMode="false" 进行回收xml ,如果可用则提供回收视图点击实现
标签: java android android-layout android-recyclerview