Цвет списка альтернативного просмотра Android, НО с выбором курсора по умолчанию - PullRequest
3 голосов
/ 01 июля 2011

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

Я хочу создать 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 Ответ

8 голосов
/ 08 декабря 2011

Обходной путь должен использовать 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>

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

...