2013-09-27 2 views
0

Я работаю над учебным пособием по спискам (и создаю персонализированные списки) и задаю вопрос о проверке значения элемента списка.Получить StringArray Имя элемента

проверяет метод 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; 
} 

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 -attribute-of-item-of-string-array). – 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

Первая часть идеальна - спасибо. Есть ли более эффективный способ установки imageResource без наличия так много операторов if/else (скажем, если у меня было 100 элементов). Можно ли задать ресурс с помощью имени элемента? –

0

Почему бы не использовать LevelListDrawable?

Что-то вроде этого:

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

Это также позволит вам добавить больше флагов & строк, коснувшись только XML-файлы и никакого кода Java.

Редактирование: вы, вероятно, захотите использовать setTag()/getTag() для повторного использования drawable, так как загрузка его заново для каждой строки может быть медленной.

Смежные вопросы