Цвет списка альтернативного просмотра Android, НО с выбором курсора по умолчанию

Я был по всей сети, включая стекопоток, и просто не могу получить ясный полный способ

Я хочу создать ListView, который

1) имеет чередующиеся цвета (я могу сделать это с кодом ниже) 2) сохраняет оранжевое поведение выбора по умолчанию для Android

для достижения #1 у меня есть пользовательский адаптер, который расширяет ArrayAdapter, а затем я переопределить getView, как так

public View getView(int position,  View convertView,   ViewGroup parent)
{
  ....

  // tableLayoutId is id pointing to each view/row in my list
  View tableLayoutView = view.findViewById(R.id.tableLayoutId); 
  if(tableLayoutView != null)
  {
      int colorPos = position % colors.length;
      tableLayoutView.setBackgroundColor(colors[colorPos]);
  }
}

моя переменная-член для цветов

private int[] colors = new int[] { 0x30ffffff, 0x30ff2020, 0x30808080 };

следуя статье "Android - Применение цвета альтернативных строк в ListView с SimpleAdapter", найденной здесь

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

андроид:listSelector="@ цвет /list_item"

где list_item.xml будет что-то вроде

<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_selected="true"
    android:drawable="@drawable/transparent" />
   .....
 </selector>

Затем я должен был бы добавить код в getView(), чтобы выяснить, в каком состоянии я нахожусь, и действовать соответственно.

Есть ли пример, как заставить это работать? Спасибо всем, что я с удовольствием выложу для всех, если смогу заставить его работать.:-(

1 ответ

Решение

Обходной путь должен использовать 2 селектора. От вашего адаптера, вместо того, чтобы устанавливать 2 цвета, вы устанавливаете 2 селектора.

if (position % 2 == 0) {
  view.setBackgroundResource(R.drawable.selector_1);
} else {
  view.setBackgroundResource(R.drawable.selector_2);
}

selector_1 определяется в selector_1.xml следующим образом:

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

selector_2 определяется в selector_2.xml следующим образом:

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

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

Другие вопросы по тегам