Отключить элементы списка с помощью селектора и isEnabled ()

Область применения : – использование overriden ArrayAdapter; – использование селектора; – использование isEnabled для отключения элементов.

Цель : – отключить некоторые элементы списка и отключить просмотр состояния с помощью селектора.

Проблема : – все работает (пользовательский вид, селектор для несфокусированных, focuesd и нажатых состояний), но отключенные элементы не используют селектор для состояния отключен.

Изучение : когда я использую isEnabled для отключения некоторых элементов в Listview Hierarchy Viewer, показано, что отключенные элементы не могут быть неконкурируемы, но не доступны, но (!) Включены.

Это ошибка или что-то не хватает?

PS действительно, docs говорят, что isEnabled не делает setEnabled (false) для элемента списка, он делает его объектом divider (?). PPS Я также пытался использовать if-statement для установки моего представления (в 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> 

Функция isEnabled () в адаптере делает объект нецелесообразным и непривлекательным. Вам нужно вызвать view.setEnabled() в конце adapter.getView() чтобы сделать ваш селектор функциональным.

Кроме того, для родительского представления передать статус включения его потомкам, вам нужно указать атрибут android:duplicateParentState="true" для дочерних представлений в вашем XML-файле.

Hack: используйте getView для проверки запрещенной логики элемента и раздувания представления с помощью другого макета. IsEnabled по-прежнему полезен.

 @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View row; if (mListItem[position].isEnabled() == false) row = inflater.inflate( R.layout.list_row_disabled, null); else { row = inflater.inflate(R.layout.list_row, null); // set right extensible icon if (mListItem[position].getType()) { ImageView ic_arrow = (ImageView) row.findViewById(R.id.list_row_arrow); ic_arrow.setImageResource(R.drawable.ic_arrow_right); } } // set left icon ImageView ic_item = (ImageView) row.findViewById(R.id.list_row_icon); ic_item.setImageResource(mListItem[position].getIcon()); // blend icon if item is disabled if (mListItem[position].isEnabled() == false) ic_item.setColorFilter(0x99D0D0D0,Mode.SRC_ATOP); // make icons look grayer // set title text TextView txvTitle = (TextView) row.findViewById(R.id.list_row_title); txvTitle.setText(mListItem[position].getTitle()); return row; } @Override public boolean isEnabled(int position) { return mListItem[position].isEnabled(); } 
Intereting Posts
Ящик навигации и просмотр пейджера в той же активности Скрытие клавиатуры после вызова новой операции, которая показывает ProgressDialog На Android, как обнаружить системный диалог отображается (параметры питания, последние приложения, низкая батарея …)? Запуск нового эмулятора Intel для Android Попытка вручную подписать пакет android с помощью jarsigner.exe и установить с помощью adb.exe Местоположение Android-sdk не было настроено в настройках в mac os? Android – как добавить аннотацию @hide в мой проект Почему элементы ListView становятся недоступными после прокрутки GetDefaultTracker () из класса, который расширяет InputMethodService? Кэш приложений не работает в устройстве Android (хорошо работает в браузере Chrome) Android ExpandableListView и onChildClick не работают Как создать Android-хэши Facebook Facebook? Объект пользовательского интерфейса, созданный с помощью XML, не обрабатывается в Android Marshmallow Мое приложение работает на android 2.3.3 для android 3.1, но останавливается с ошибкой на 4.0 + Простой адаптер coursor с базой данных SQLite и custmize listview