【问题标题】:Disable click/touch for some of a RecyclerView's items禁用 RecyclerView 的某些项目的单击/触摸
【发布时间】:2023-03-13 06:56:01
【问题描述】:

有没有办法防止点击回收站视图的特定项目?已经尝试将视图设置为不可点击且未在视图持有者构造函数中启用,但仍然没有运气。当我触摸该项目布局内的编辑文本时,它仍然是可点击的,并且会打开键盘。

提前非常感谢!

编辑:这与引用主题中提出的问题不同。我不想禁用整个回收视图。只需从回收站视图中禁用某些项目。我已经尝试了针对特定项目视图的引用主题中存在的解决方案,但它不起作用。

【问题讨论】:

  • 如果不确切知道您想要做什么就很难回答,这可能需要您在帖子中添加代码和图像。您说“防止点击”,然后在 EditText 中谈论 focus
  • 我想禁止点击回收站视图项的整个布局,包括布局内的视图(按钮、编辑文本等)

标签: android android-recyclerview


【解决方案1】:

完全阻止与单个项目内的任何内容交互的最简单方法可能是在其上放置一个透明视图,以拦截所有触摸事件。您可以通过将现有的 itemView 布局包装在 FrameLayout 中并在其上添加另一个视图来做到这一点:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- your itemView content here -->

    <View
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>

onCreateViewHolder() 中,您可以为叠加层分配一个无操作点击监听器:

@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    View itemView = inflater.inflate(R.layout.itemview, parent, false);
    MyViewHolder holder = new MyViewHolder(itemView);

    holder.overlay.setOnClickListener(v -> {});

    return holder;
}

现在,当你想禁用点击时,你可以调用

holder.overlay.setVisibility(View.VISIBLE);

当你想禁用它们时,你可以调用

holder.overlay.setVisibility(View.GONE);

【讨论】:

  • 非常感谢 Ben P!我错过了 FrameLayout,因此视图真正覆盖了项目布局
  • P 当我调用 setVisibility(GONE) 时,视图会闪烁,就像它要消失一样,然后又变得可见。有什么想法吗?在 notifyItemChanged() 之后,我在 bindType() 方法上调用 setVisibility。
猜你喜欢
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
相关资源
最近更新 更多