Я создал операцию "Входящие", и я зеркалирую некоторые функции почтового приложения по умолчанию, которое поставляется с Android.
В Mail цвет фона сообщения, которое не было прочитано, является более светлым цветом, чем остальные элементы в списке. Я отразил это, установив вызов метода setBackgroundResource в методе getView моего адаптера. setBackgroundColor ничего не делает.
if (!msgSum.getIsRead()) {
LinearLayout l = (LinearLayout) v.findViewById(R.id.inbox_background);
if (l != null) {
l.setBackgroundResource(R.color.inbox_unread);
}
}
else {
LinearLayout l = (LinearLayout) v.findViewById(R.id.inbox_background);
if (l != null) {
l.setBackgroundResource(R.color.inbox_read);
}
}
Проблема в том, что элементы затем теряют возможность выделить. Я имею в виду, что обычно, если вы прокручиваете колесико мыши при использовании эмулятора (или если ваше Android-устройство имеет какую-то возможность прокрутки, вы его используете), элементы списка станут желтыми, как если бы они фокусировались.
Как я могу выполнить то, что я пытаюсь сделать, не теряя возможности выделить элемент списка?
Спасибо за помощь
В предложении Ромейна Гая я смотрел видеоролик "Google I/O 2010 - мир ListView" на YouTube. Около минуты 31:43 он публикует фрагмент кода, который решает эту проблему. Вы должны сделать пару модификаций, хотя (я развиваюсь против 2.1). Сначала вы должны объявить параметр xmlns: android в теге селектора. В коде Java вы должны вызвать convertView.setBackgroundResource(R.drawable.yourselector) вместо setBackground (который больше не существует).
Это потому, что выделение выделяется за элементами списка. Вам нужно создать список состояний, пригодный для вашего фона, который задает цвет фона прозрачным в выбранном состоянии. Если вы посмотрите разговор о ListView, который я дал в Google I/O 2010, вы получите пример того, как это сделать.