2013-09-27 148 views
0

我正在通过关于列表的教程(并创建自定义列表视图)并查询有关检查列表项目的值。获取StringArray项目名称

的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> 

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

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

+0

我认为这是可能的,但它可能不值得...检查[**这个**](http://stackoverflow.com/questions/7224926/how-to-get-name - 字符串数组的属性)。 – gnclmorais

+0

你有没有试过setTag()函数? – gokhanakkurt

回答

0

只要写

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

第一部分是完美的 - 谢谢。有没有这么多的if/else语句来设置imageResource的更有效的方法(可以说,如果我有100个项目)。我可以使用项目名称设置资源吗? –

0

为什么不使用LevelListDrawable

事情是这样的:

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

这也将让你触摸只是XML文件,并没有Java代码中添加更多的标志&字符串。

编辑:您可能想使用setTag()/ getTag()来重新使用drawable,因为每次重新载入它可能会很慢。