альтернативный цвет строки android listview, НО с выбором курсора по умолчанию

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

Я хочу создать 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», найденной здесь

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

android: listSelector = "@ color / 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 (), чтобы выяснить, в каком состоянии я нахожусь, и действовать соответствующим образом.

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


person user825402    schedule 01.07.2011    source источник


Ответы (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>

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

person nicoo    schedule 08.12.2011