2013-09-27 172 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,因爲每次重新載入它可能會很慢。