Android 安卓系统可以<;选择器>;基于对象';s状态而不是视图';什么州?

Android 安卓系统可以<;选择器>;基于对象';s状态而不是视图';什么州?,android,listview,css-selectors,Android,Listview,Css Selectors,我认为这是一个非常简单的问题,但我很难找到答案 我正在开发一个android应用程序(目前正在开发v1.5API),其中一个活动使用ListView。我希望能够基于内存对象的状态而不是视图或列表项的状态来设置每个列表项的属性 下面是一个简单的例子……假设我有一个Person类,其公共成员的定义如下: public class Person { public string getName() {...} public boolean isYoung() {...}

我认为这是一个非常简单的问题,但我很难找到答案

我正在开发一个android应用程序(目前正在开发v1.5API),其中一个活动使用ListView。我希望能够基于内存对象的状态而不是视图或列表项的状态来设置每个列表项的属性

下面是一个简单的例子……假设我有一个Person类,其公共成员的定义如下:

public class Person {       
    public string getName() {...}

    public boolean isYoung() {...}        
    public boolean isMiddleAged() {...}
    public boolean isOld() {...}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:background="@color/green" />
</selector>
就像上面概述的示例一样,我的类中的属性是互斥的(因此三个布尔值中只有一个是真的)。现在假设我的ListView中的每个列表项都是从Person对象创建的。我目前正在使用一个自定义的ArrayAdapter类将Person对象绑定到列表视图(不确定这是否重要,但我想我会提到它)

我希望能够根据列表视图中绑定的每个Person对象的值设置各种列表项属性(文本颜色、样式和背景色)。比如可能把所有年轻人的背景颜色都变成绿色,中年人变成橙色,老年人变成黑色。我如何才能达到这些结果

更新:感谢您快速回复Cristian C。我一直在尝试实施您的解决方案,并不断收到此异常:

由以下原因引起:org.xmlpull.v1.XmlPullParserException:二进制XML文件行#6:
标记需要一个“drawable”属性或定义drawable的子标记

…每次执行setBackgroundResource()时:

public View getView(int index, View convertView, ViewGroup parent) {
    //...stuff here...

   if(person.isYoung())
      view.setBackgroundResource(R.drawable.green);
}
其中选择器“green.xml”定义如下:

public class Person {       
    public string getName() {...}

    public boolean isYoung() {...}        
    public boolean isMiddleAged() {...}
    public boolean isOld() {...}
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:background="@color/green" />
</selector>

你看到我所做的有什么明显的错误吗


谢谢你的回复

您必须按程序进行操作。假设您已经在XML文件中定义了所有这些选择器;然后你会有这样的东西:

private class YourAdapter extends ArrayAdapter<Person>{
    // foo bar baz
    //...

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

        // more foo bar baz

        if( person.isYoung() )
            view.setBackgroundResource(R.drawable.green);
        else if( person.isMiddledAge() )
            view.setBackgroundResource(R.drawable.orange);
        else if( person.isOld() )
            view.setBackgroundResource(R.drawable.black);// are you racist?  Just kidding

        return view;
    }
}
然后,你会做:

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


感谢克里斯蒂安的回复……请查看我的更新。再次感谢!完美的再次感谢您的帮助=)