2017-03-05 45 views
1

對於適配器中的每個條目,我都有一個帶簡單複選框的回收站視圖。我還有一個RecyclerView下面的Done按鈕,點擊後,將啓動一個API調用,其中包含用戶已經檢查過的所有項目。問題在於api調用返回(自然)和活動完成之間有一點點延遲,如果用戶足夠快,允許用戶點擊任何複選框。單擊項目時禁用RecyclerView

有沒有一種方法可以禁用RecyclerView的觸摸事件來防止這種情況發生?我已經嘗試了回調,做當完成按鈕被點擊沒有效果如下:

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

我不想使用onBindViewHolder實際禁用每個項目,因爲這將意味着重新加載整個RecyclerView給力該方法執行。

回答

2

在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); 
+0

機器人:可點擊= 「true」 是很重要 – Amit