禁用某些RecyclerView项的单击/触摸

时间:2018-10-12 17:20:31

标签: android android-recyclerview

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

非常感谢!

编辑:这与所引用主题中提出的问题不同。我不想禁用整个回收视图。只需从“回收者”视图中禁用某些项目即可。我已经尝试了针对特定项目视图的参考主题中提供的解决方案,但该方法不起作用。

1 个答案:

答案 0 :(得分:2)

完全阻止与单个项目中的任何内容进行交互的最简单方法可能是在其上方放置一个透明视图以拦截所有触摸事件。为此,您可以将现有的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);