Я думаю, что это довольно простой вопрос, но у меня проблемы с поиском ответа там ...Может ли Android <selector> основываться на состоянии объекта, а не на состоянии представления?
Я разрабатываю приложение для Android (в настоящее время разрабатывает API v1.5), и один из видов деятельности ListView. Я хочу иметь возможность устанавливать свойства каждого элемента списка на основе состояния объекта с памятью, а не состояния представления или элемента списка.
Вот простой пример .... что у меня есть класс, человек, который общественные члены определяются следующим образом:
public class Person {
public string getName() {...}
public boolean isYoung() {...}
public boolean isMiddleAged() {...}
public boolean isOld() {...}
}
Так же, как, например, описанной выше свойства в моем классе являются взаимоисключающими (так только один из трех булевых значений может быть правдой). Теперь скажите, что каждый элемент списка в моем ListView создан из объекта Person. В настоящее время я использую пользовательский класс ArrayAdapter < Person> для привязки объектов Person к представлению списка (не уверен, что это важно или нет, но я думал об этом упомянуть).
Я хочу иметь возможность устанавливать различные свойства элемента списка (цвет текста и стиль и цвет фона) на основе значений каждого объекта Person, связанного в представлении списка. Как возможно, делая цвет фона всех молодых людей зелеными, людьми среднего возраста апельсинами и старыми людьми черными. Как я могу достичь этих результатов?
UPDATE: Спасибо за ваш ответ скорейшего Cristian C. Я пытался реализовать свое решение и продолжать получать это исключение:
Вызванный: org.xmlpull.v1.XmlPullParserException: двоичный файл XML строка # 6: тег
<item
> требует 'рисуем' атрибут или дочерний тег, определяющий Drawable
... каждый раз, когда setBackgroundResource() выполняет:
public View getView(int index, View convertView, ViewGroup parent) {
//...stuff here...
if(person.isYoung())
view.setBackgroundResource(R.drawable.green);
}
Если селектор «green.xml» определяется следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:background="@color/green" />
</selector>
Видите ли вы какие-либо вопиющие ошибки с тем, что я пытаюсь сделать?
Спасибо за ваши ответы!
Спасибо за ответ Cristian ... смотрите мой Обновить. Еще раз спасибо! – MoMo
Я не видел твой комментарий ... Я обновлю свой ответ ... – Cristian
Perfect !! Еще раз спасибо за вашу помощь =) – MoMo