在Android中的MutliChoiceMode中,如何防止在ListView行中单击元素

时间:2016-07-27 21:28:18

标签: android listview multichoiceitems

我使用自定义适配器设置了Listview。每个ListView的行都有一个按钮和一个用户可以与之交互的搜索栏。我还实现了一个MultiChoiceModeListener来处理长按ListView行,以便允许用户删除多行。

当ListView处于MultiSelect模式时,我需要阻止用户与ListView的每个行元素(按钮,搜索栏等)进行交互,禁用它们,然后在用户退出多选模式后启用它们

有一种简单的方法吗?我试过添加:

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

onCreateActionMode()方法,但没有成功,我仍然可以与行元素进行交互。非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:1)

将属性android:descendantFocusability="blocksDescendants"添加到列表行的布局根目录中。这将阻止孩子获得焦点,并使用户能够独立地单击列表行或其任何子视图。现在,您可以像在代码中一样使用setEnabled()禁用(灰显)并重新启用任何子视图。或者,如果您只是想阻止用户与视图进行交互而不将其视为灰色,则可以使用setClickable()代替。

答案 1 :(得分:0)

您可以检查是否希望列表项元素进行交互以触摸自定义适配器内部,因此您可以在其中设置侦听器或禁用它们。