2016-07-27 39 views
0

我有一個使用自定義適配器設置的Listview。每個ListView的行都有一個按鈕和一個用戶可以與之交互的搜索欄。我還實現了一個MultiChoiceModeListener來處理長按ListView行以允許用戶刪除多行。如何在Android中的MutliChoiceMode中防止ListView行中的單擊元素

我需要的是防止用戶在ListView處於MultiSelect模式時通過禁用它們來與每個ListView的行元素(按鈕,seekbar等)進行交互,然後在用戶退出多重選擇時啓用它們模式。

有沒有簡單的方法來做到這一點?我試着添加:

for(int i = 0; i < adapter.getCount(); i++){ 
     View v = promptListView.getChildAt(i); 
     v.setEnabled(false); 
    } 

onCreateActionMode()方法,但沒有成功,我仍然能夠與行元素進行交互。任何幫助將不勝感激,謝謝。

回答

1

將屬性android:descendantFocusability="blocksDescendants"添加到列表行的佈局根目錄。這將防止孩子獲得焦點,並使用戶能夠單獨點擊列表行或其任何子視圖。現在,您可以像使用代碼一樣使用setEnabled()來禁用(變灰)並重新啓用任何子視圖。或者,如果您只是希望防止用戶能夠與視圖進行交互而不使其灰掉,則可以使用setClickable()

0

您可以檢查是否希望列表項元素在您的自定義適配器內部進行交互,以便您可以在其中設置偵聽器或禁用它們。

+0

從適配器內部執行它將涉及設置回調方法和檢查條件等,這有點複雜。我寧願只是遍歷列表並禁用所有的視圖,但我不知道如何做到這一點。 – Highway62

相關問題