我有一个回收站视图,其中包含适配器中每个条目的简单Checkbox。我还在RecyclerView下面有一个Done按钮,当点击它时,会启动一个API调用,其中包含用户已检查过的所有项目。问题是api调用返回(自然)和活动完成之间有一点延迟,允许用户点击任何复选框,如果它们足够快。
有没有办法禁用RecyclerView的触摸事件来防止这种情况?我已经尝试了一个回调,当单击完成按钮无效时执行以下操作:
mRecyclerViewList.setClickable(false);
mRecyclerViewList.setEnabled(false);
我不想使用onBindViewHolder来实际禁用每个项目,因为这意味着重新加载整个RecyclerView以强制执行该方法。
答案 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>