Intereting Posts
Как исправить эту ошибку: «android.app.RemoteServiceException: плохое уведомление, отправленное из пакета» Найти пользователей Android в своем списке контактов Кастинг для кнопки лишний – почему? Ошибка StackOverflow для Android / Eclipse Android, как разместить все мои классы в одном пакете с помощью Proguard Менеджер SDK: Не удалось установить. SDK android platform 3.0 API 11, версия 2 Поиск названий городов из PlaceAutoComplete дает зашифрованные названия городов JSON Parsing работает на Android 4.0, но не на Android <4.0 Добавление дочернего элемента в родительский элемент на кнопке Нажмите Xamarin.forms Панель инструментов не видна на устройствах Android 4.X Порядок обратного списка в массиве Предварительный просмотр камеры Android выглядит странно Android – не удается создать обработчик внутри потока, который не вызвал Looper.prepare () Внутренняя ошибка Eclipse делает невозможным использование git Активность начата без EXTRA_ACCOUNT при использовании совместного использования в GooglePlus SDK

Отключить элементы списка с помощью селектора и 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(); }