Intereting Posts
Как отправить информацию о местоположении Google Maps через SMS в качестве ссылки Установите первоначально выбранный индекс / id объекта в BottomNavigationView Получить объект JSON из ответа HTTP Где я могу найти статистику по распределению Android (количество устройств) с помощью процессора? Статус говорит о проекте в Prod Создание нового поля AVD-CPU / ABI показывает «Нет системных изображений», В чем смысл removeCallbacks (Runnable r) в Handler в Android Не поддерживает ли Picasso загрузку изображений, использующих протокол https Android – намерение Facebook посетить определенную страницу Facebook? RoboGuice 3.0 NoClassDefFoundError: roboguice.inject.ContextScopedRoboInjector Какое Android-устройство следует покупать для разработки приложений для Android? Android: GC не уважает SoftReferences? Как активировать действие с помощью локального уведомления, созданного из удаленного уведомления Appcompat-v7 v21.0.0 вызывая сбои на устройствах Samsung с Android v4.2.2 Android – автоматическое оверлейное нажатие / выделенное состояние изображения

Выбираемый селектор не работает в Jelly Bean

У меня есть переносимый селектор в качестве фона для каждого элемента в ListView чтобы выделить выбранную строку. Eveything отлично работает в Ice Cream Sandwich, но, похоже, не работает в Jelly Bean. Невозможно найти документацию о том, какие изменения могут привести к ее прекращению работы и что мне нужно сделать, чтобы исправить это.

Не работая, я имею в виду, когда я нажимаю на строку в ListView , цвет фона элемента не поворачивает @color/blue , но он работает в ICS.

Это код селектора, который я использую (listing_selector.xml):

 <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_focused="true" android:drawable="@color/blue" /> <item android:state_pressed="true" android:drawable="@color/blue" /> <item android:state_activated="true" android:drawable="@color/blue_selected" /> <item android:state_selected="true" android:drawable="@color/blue_selected" /> <item android:drawable="@android:color/transparent" /> </selector> 

Это макет ListView :

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="horizontal" android:background="@color/listing_selector" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" /> </RelativeLayout> 

Это синий ресурс цвета:

 <resources> <color name="blue">#ff33b5e5</color> </resources> 

ОБНОВЛЕНИЕ 1:

Попробовал переместить селектор из color папки в папку с возможностью drawable и обновить код:

 android:background="@drawable/listing_selector" 

ОБНОВЛЕНИЕ 2:

Кроме того, в ListView попытался добавить следующее:

  <ListView android:id="@android:id/list" android:layout_width="wrap_content" android:layout_height="fill_parent" android:listSelector="@drawable/listing_selector" /> 

ОБНОВЛЕНИЕ 3:

Я думал, что это может быть что-то в моем коде, но я удалил весь код из onListItemClick из ListView но selector не работает.

ОБНОВЛЕНИЕ 4:

Я сузил его до state_selected или state_activated не работая как, state_pressed похоже, работает

ОБНОВЛЕНИЕ 5:

Думаю, я ошибся. Я не думаю, что селектор узнается вообще. Я сбивал с толку встроенную подсветку ListView качестве моего селектора. Теперь я задаюсь вопросом, связано ли это с тем, как мой проект настроен. У меня есть селектор в классе библиотеки. Возможно, что-то изменилось с ICS на JB, однако перемещение селектора в проект моего приложения, похоже, не исправило его.

ОБНОВЛЕНИЕ 6:

Хорошо, после того, как вы state_selected state_activated волосы, я снова сузил его до состояния state_selected или state_activated не распознанного, так как изменение цвета для state_pressed действительно работает, а это значит, что мой селектор распознается. Из комментариев, кажется, что-то с моим приложением, так как другие смогли получить селекторов, работающих с Jelly Bean.

Хотя интереснее то, что изменение drawable значения для состояния по умолчанию не распознается. Там, где у меня color/transparent , я думаю, что изменение этого цвета приведет к тому, что листинг изменится на этот цвет, но это не так.

Кроме того, это также не работает в ICS.

ОБНОВЛЕНИЕ 7:

После еще большего притягивания волос я обнаружил, что длительное нажатие на пункт меню приводит к изменению цвета этого элемента. Просто нажатие на элемент все еще не работает. Даже не уверен, что значит.

** Окончательное обновление: **

Я сдаюсь, я удалил селектор и просто обновляю ListView при щелчке и запоминаю позицию, щелкнув и выделив ее из кода. Не идеально, но не стоит пытаться исправить.

Solutions Collecting From Web of "Выбираемый селектор не работает в Jelly Bean"

Хорошо, я думаю, что это проблема с вашим селектором. Попробуйте удалить state_focused и state_activated. Вы можете попробовать это для своего селектора:

 <!-- Disabled State --> <item android:state_enabled = "false" android:state_focused = "true" android:state_pressed = "true" android:drawable="@android:color/transparent"> </item> <item android:state_enabled = "false" android:state_focused = "true" android:drawable="@android:color/transparent"> </item> <!-- Pressed State --> <item android:state_pressed = "true" android:state_focused = "true"> <shape> <solid android:color="@color/blue"/> </shape> </item> <item android:state_pressed = "true" android:state_focused = "false"> <shape> <solid android:color="@color/blue"/> </shape> </item> <!-- Normal State --> <item android:drawable="@android:color/transparent"> </item> 

Я обнаружил, что мне нужно использовать объект с android:drawable , а не android:drawable , потому что на телефонах с предварительной ICS весь список будет выделен цветом вместо имени нажатого списка.

Вы также можете добавить в свой код state_selected , но я не уверен, как он будет использоваться. Проверьте код выбора по умолчанию для jelly bean для состояний, которые они используют: list_selector_background.xml .

listing_selector.xml должен находиться в папке res/drawable и установить атрибут android:background вашего RelativeLayout следующим образом:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="fill_parent" android:orientation="horizontal" android:background="@drawable/listing_selector" > 

Я не могу сказать, почему он работает в одной версии и не работает в другом, но я получил альтернативное решение.

Определите свой цвет как ресурс в ресурсах

 <?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="blue">#00F</drawable> ... </resources> 

Используйте этот цвет в своем селекторе

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/blue" /> ... ... </selector> 

Попробуйте это и дайте мне знать.

Я думаю, что все отлично!

Ваш код файла XML-кода: –

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/gray" android:state_focused="true"/> <item android:drawable="@color/gray" android:state_pressed="true"/> <item android:drawable="@color/orange" android:state_activated="true"/> <item android:drawable="@color/orange" android:state_selected="true"/> <item android:drawable="@color/orange"/> </selector> 

Теперь создайте значения папки-v16 под папкой res и поместите в него этот файл цветов.

 <?xml version="1.0" encoding="utf-8"?> <resources> <color name="gray">#4f4f4f</color> <color name="orange">#e26c0e</color> </resources> 

А затем список:

 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="20dp" android:listSelector="@drawable/listing_selector" > </ListView> 

Надеюсь, это сработает! Протестировано на версии 4.1

Из документов API :

Примечание. Помните, что Android применяет первый элемент в списке состояний, который соответствует текущему состоянию объекта . Итак, если первый элемент в списке не содержит ни одного из указанных выше атрибутов состояния, он применяется каждый раз, поэтому значение по умолчанию всегда должно быть последним (как показано в следующем примере).

Таким образом, попробуйте изменить порядок состояний ваших селекторов в соответствии с предлагаемым порядком. В вашем случае это будет следующим:

 <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" android:drawable="@color/blue" /> <item android:state_focused="true" android:drawable="@color/blue" /> <item android:state_selected="true" android:drawable="@color/blue_selected" /> <item android:state_activated="true" android:drawable="@color/blue_selected" /> <item android:drawable="@android:color/transparent" /> </selector>