我使用自定义适配器设置了Listview。每个ListView的行都有一个按钮和一个用户可以与之交互的搜索栏。我还实现了一个MultiChoiceModeListener来处理长按ListView行,以便允许用户删除多行。
当ListView处于MultiSelect模式时,我需要阻止用户与ListView的每个行元素(按钮,搜索栏等)进行交互,禁用它们,然后在用户退出多选模式后启用它们
有一种简单的方法吗?我试过添加:
for(int i = 0; i < adapter.getCount(); i++){
View v = promptListView.getChildAt(i);
v.setEnabled(false);
}
到onCreateActionMode()
方法,但没有成功,我仍然可以与行元素进行交互。非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
将属性android:descendantFocusability="blocksDescendants"
添加到列表行的布局根目录中。这将阻止孩子获得焦点,并使用户能够独立地单击列表行或其任何子视图。现在,您可以像在代码中一样使用setEnabled()
禁用(灰显)并重新启用任何子视图。或者,如果您只是想阻止用户与视图进行交互而不将其视为灰色,则可以使用setClickable()
代替。
答案 1 :(得分:0)
您可以检查是否希望列表项元素进行交互以触摸自定义适配器内部,因此您可以在其中设置侦听器或禁用它们。