获取StringArray项目名称

时间:2013-09-27 11:41:24

标签: java android

我正在编写关于列表的教程(以及创建自定义列表视图),并且有关于检查列表项的值的查询。

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

@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;
}

countries.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>

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

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

2 个答案:

答案 0 :(得分:1)

只需写下

    <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);
}

答案 1 :(得分:0)

为什么不使用LevelListDrawable

这样的事情:

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

这也可以让你添加更多旗帜和只接触XML文件而不接触Java代码的字符串。

编辑:您可能希望使用setTag()/ getTag()来重用drawable,因为每行重新加载它可能会很慢。