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