Элемент списка ListView с помощью настраиваемого селектора

Можно ли применить пользовательский фон к каждому элементу списка через селектор списка?

Селектор по умолчанию указывает @android:color/transparent для state_focused="false" , но изменение этого параметра на какой-либо пользовательский вариант не влияет на элементы, которые не выбраны. Ромен Гай, кажется, предлагает в этом ответе, что это возможно.

В настоящее время я добиваюсь такого же эффекта, используя специальный фон для каждого представления и скрывая его, когда элемент выбран / сфокусирован / независимо от того, как показан селектор, но было бы более элегантно, чтобы все это определялось в одном месте.

Для справки, это селектор, который я использую, чтобы попытаться заставить это работать:

          

И вот как я устанавливаю селектор:

  

Заранее благодарю за любую помощь!

Я был разочарован этим сам и, наконец, решил его. Как намекал Ромен Гай, есть еще одно состояние: "android:state_selected" , который вы должны использовать. Используйте состояние, которое можно выделить для фона вашего элемента списка, и используйте другое состояние для listSelector вашего списка:

list_row_layout.xml:

   ...  

listitem_background.xml:

      

layout.xml, который включает ListView:

 ...  ... 

listitem_selector.xml:

      

Решение dglmtn не работает, если у вас есть 9-патч, который можно использовать с заполнением в качестве фона. Странные вещи случаются, я даже не хочу об этом говорить, если у вас есть такая проблема, вы их знаете.

Теперь, если вы хотите иметь listview с разными состояниями и 9-патч-образами (он будет работать с любыми чертежами и цветами, я думаю), вам нужно сделать 2 вещи:

  1. Установите селектор для элементов в списке.
  2. Избавьтесь от селектора по умолчанию для списка.

Что вам нужно сделать, так это сначала установить row_selector.xml:

        

Не забывайте android:state_selected . Он работает как android:state_focused для списка, но применяется для элемента списка.

Теперь примените селектор к элементам (row.xml):

   ...  

Создайте прозрачный селектор для списка:

  

Это должно сделать что-то.

Никогда не используйте «цвет фона» для ваших строк списка …

это заблокирует каждое действие селектора (была моя проблема!)

удачи!

В статье «Почему мой список черный? Оптимизация Android» в блоге разработчиков Android содержит подробное объяснение того, почему фон списка становится черным при прокрутке. Простой ответ: установите cacheColorHint в свой список прозрачным (# 00000000).

Достаточно, если вы поместите в list_row_layout.xml :

 ...  

listitem_selector.xml:

       

вместо:

 android:drawable="@color/transparent" 

записывать

 android:drawable="@android:color/transparent" 

Вы можете написать тему:

 
 android:name=".List10" android:theme="@style/Theme"

theme.xml

  

styles.xml

   

my_selector - это ваш пользовательский селектор. Извините, я не знаю, как написать свой код.

Я не уверен, как добиться желаемого эффекта через сам селектор – ведь по определению есть один селектор для всего списка.

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

Я всегда использую тот же метод, и он работает каждый раз, где угодно: я просто использую селектор, подобный этому

    

и установите в ListView (ЭТО ОЧЕНЬ ВАЖНО СДЕЛАТЬ ЭТО РАБОТУ) атрибут

 android:choiceMode="singleChoice" 

для textColor просто поместите в папку цветов (ВАЖНАЯ, не доступная папка!) селектор, подобный этому

    

это шаблон строки строки

   

все демонстрирует работу без утомительных обходных решений. надеюсь эта помощь

Команда FrostWire здесь.

Весь селектор дерьма api работает не так, как ожидалось. После того, как все решения, представленные в этом streamе, ни к чему хорошему, мы просто решили проблему в момент раздувания элемента ListView.

  1. Убедитесь, что ваш элемент сохраняет его состояние, мы сделали это как переменную-член MenuItem (выбрано логическое значение)

  2. Когда вы завываете, спросите, выбран ли базовый элемент, если да, просто установите ресурс, который вы хотите использовать в качестве фона (будь то 9patch или что-то еще). Убедитесь, что ваш адаптер знает об этом и что он вызывает notifyDataChanged (), когда что-то было выбрано.

      @Override public View getView(int position, View convertView, ViewGroup parent) { View rowView = convertView; if (rowView == null) { LayoutInflater inflater = act.getLayoutInflater(); rowView = inflater.inflate(R.layout.slidemenu_listitem, null); MenuItemHolder viewHolder = new MenuItemHolder(); viewHolder.label = (TextView) rowView.findViewById(R.id.slidemenu_item_label); viewHolder.icon = (ImageView) rowView.findViewById(R.id.slidemenu_item_icon); rowView.setTag(viewHolder); } MenuItemHolder holder = (MenuItemHolder) rowView.getTag(); String s = items[position].label; holder.label.setText(s); holder.icon.setImageDrawable(items[position].icon); //Here comes the magic rowView.setSelected(items[position].selected); rowView.setBackgroundResource((rowView.isSelected()) ? R.drawable.slidemenu_item_background_selected : R.drawable.slidemenu_item_background); return rowView; } 

Было бы очень приятно, если бы селектора действительно работали, теоретически это приятное и элегантное решение, но похоже, что он сломан. ПОЦЕЛУЙ.

  • Как динамически удалять элементы из списка ListView при нажатии кнопки?
  • Отображение изображения Qt jpg
  • Android: использование WebView вне контекста активности
  • Android: переключения экранов с новой активностью или просто изменение содержимого
  • В чем разница между ViewData и ViewBag?
  • Как нажимать или нажимать текст TextView на разные слова?
  • Android ListView child View setEnabled () и setClickable () ничего не делают
  • OnItemClickListener и OnClickListener не работают в ListView
  • Что такое вид в Oracle?
  • setOnItemClickListener в пользовательском ListView
  • Узнайте, прокручивается ли ListView до конца?
  • Давайте будем гением компьютера.