单击项目时禁用RecyclerView

时间:2017-03-05 23:31:20

标签: android android-recyclerview

我有一个回收站视图,其中包含适配器中每个条目的简单Checkbox。我还在RecyclerView下面有一个Done按钮,当点击它时,会启动一个API调用,其中包含用户已检查过的所有项目。问题是api调用返回(自然)和活动完成之间有一点延迟,允许用户点击任何复选框,如果它们足够快。

有没有办法禁用RecyclerView的触摸事件来防止这种情况?我已经尝试了一个回调,当单击完成按钮无效时执行以下操作:

mRecyclerViewList.setClickable(false);
mRecyclerViewList.setEnabled(false);

我不想使用onBindViewHolder来实际禁用每个项目,因为这意味着重新加载整个RecyclerView以强制执行该方法。

2 个答案:

答案 0 :(得分:4)

在RecyclervView上放置一个空白的可单击透明视图以捕获点击次数。当您的API返回时,将可见性设置为“已消失”。

示例布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="50dp"
    android:background="#FFFFFFFF"
    android:orientation="horizontal">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:paddingBottom="16dp"
        android:paddingTop="16dp" />

    <View
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:visibility="gone" />
</FrameLayout>

代码中的某处

    // Block clicks on RecyclerView. overlay will consume clicks.
    findViewById(R.id.overlay).setVisibility(View.VISIBLE);

    // Re-enable clicks on RecyclerView
    findViewById(R.id.overlay).setVisibility(View.GONE);

答案 1 :(得分:-1)

使活动launchMode为“ SingleTop”。应该可以。

<activity android:name=".SomeActivity"
 android:launchMode="singleTop">
</activity>