0

我正在完成一个关于列表的教程(并创建自定义列表视图),并且有一个关于检查列表项值的查询。

getView 方法根据列表项的值检查要显示的图像(使用等号):

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

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View row = inflater.inflate(R.layout.list_items, parent, false);
    String[] items = getResources().getStringArray(R.array.countries);

    ImageView iv = (ImageView) row.findViewById(R.id.imageView1);
    TextView tv = (TextView) row.findViewById(R.id.textView1);

    tv.setText(items[position]);

    if(items[position].equals("United States")) {
        iv.setImageResource(R.drawable.usa);
    } else if(items[position].equals("Brazil")) {
        iv.setImageResource(R.drawable.brazil);
    } else if(items[position].equals("Russia")) {
        iv.setImageResource(R.drawable.russia);
    } else if(items[position].equals("Japan")) {
        iv.setImageResource(R.drawable.japan);
    }

    return row;
}

国家.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="countries">
        <item name="usa">United States</item>
        <item name="brazil">Brazil</item>
        <item name="russia">Russia</item>
        <item name="japan">Japan</item>
    </string-array>
</resources>

我想检查项目“名称”属性。这可能吗?

我的问题出现在我正在考虑创建国家.xml 的特定语言副本时,虽然项目名称相同,但文本会不同,我认为这会破坏我的代码?

4

2 回答 2

2

写吧

    <item name="usa">@string/usa</item>
    <item name="brazil">@string/brazil</item>
    <item name="russia">@string/russia</item>
    <item name="japan">@string/japan</item>

您将必须创建 4 个字符串,如下所示

    <string name="usa">United States</string>
    <string name="brazil">Brazil</string>
    <string name="russia">Russia</string>
    <string name="japan">Japan</string>

您可以按如下方式进行检查。

if (items[position].equals(context.getResources().getString(R.string.usa))) {
    iv.setImageResource(R.drawable.usa);
} else if (items[position].equals(context.getResources().getString(R.string.brazil))) {
    iv.setImageResource(R.drawable.brazil);
} else if (items[position].equals(context.getResources().getString(R.string.russia))) {
    iv.setImageResource(R.drawable.russia);
} else if (items[position].equals(context.getResources().getString(R.string.japan))) {
    iv.setImageResource(R.drawable.japan);
}
于 2013-09-27T11:59:29.423 回答
0

为什么不使用LevelListDrawable

像这样的东西:

LevelListDrawable image = (LLD) getResources().getDrawable(R.drawable.flags);
image.setLevel(position);
iv.setImageDrawable(image);

这也将允许您通过仅接触 XML 文件而不接触 Java 代码来添加更多标志和字符串。

编辑:您可能想使用 setTag()/getTag() 来重用可绘制对象,因为为每一行重新加载它可能会很慢。

于 2013-09-27T11:56:12.387 回答