使用selector和isEnabled()禁用listview项

Ale*_*niy 4 xml android listview android-arrayadapter

范围: - 使用overriden ArrayAdapter; - 使用选择器; - 使用isEnabled禁用项目.

目标: - 禁用某些列表项并通过选择器加载禁用状态视图.

问题: - 一切正常(自定义视图,选择器用于未聚焦,focuesd和按下状态)但禁用的项目不使用选择器用于禁用状态.

调查:当我使用isEnabled禁用listview中的某些项时,层次结构查看器显示禁用的项目不可聚焦,不可点击但启用(!).

这是一个错误或缺少什么?

PS实际上,docs说isEnabled没有为列表项做setEnabled(false),它使它成为一个divider(?)对象.PPS我也尝试使用if语句将我的View(在getView中)设置为isEnabled(false).但它只适用于重点项目?

我的选择器看起来像:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Disabled -->
    <item 
        android:state_enabled="false"
        android:textColor="@color/greyDark"
        android:drawable="@drawable/list_item_disabled" />
    <!-- Pressed -->
    <item 
        android:state_enabled="true"
        android:state_pressed="true"
        android:textColor="@android:color/white"
        android:drawable="@drawable/list_item_pressed" />
    <!-- Focused -->
    <item
        android:state_enabled="true"
        android:state_focused="true"
        android:textColor="@android:color/white"
        android:drawable="@drawable/list_item_focused" />
    <!-- Default -->
    <item 
        android:state_enabled="true"
        android:drawable="@drawable/list_item_unfocused" />
</selector>
Run Code Online (Sandbox Code Playgroud)

小智 9

适配器中的函数isEnabled()只使项目不可聚焦且不可点击.您需要view.setEnabled()在结束时调用adapter.getView()以使您的选择器正常运行.

此外,要使父视图将启用状态传递给其后代,您需要android:duplicateParentState="true"在xml文件中为子视图指定属性.