我正在编写关于列表的教程(以及创建自定义列表视图),并且有关于检查列表项的值的查询。
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的语言特定副本,虽然项目名称相同,但文本会有所不同,我认为这会破坏我的代码吗?
答案 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,因为每行重新加载它可能会很慢。