Динамически устанавливаемый источник ImageView

#android #android-layout #android-imageview

#Android #android-макет #android-imageview

Вопрос:

Я пытаюсь установить флаги стран в ImageView в соответствии с названием страны.

Я следую соглашению о том, что изображение флага страны всегда хранится в drawable/flag_country_name

например; drawable/flag_india, drawable/flag_south_africa

Код, который я написал до сих пор, является

 imageFlagRight.setImageResource(getFlagResource("India"));

private int getFlagResource(String teamName) {
        if(teamName.equals("India")){
            return R.drawable.flag_india;
        }
        if(teamName.equals("Srilanka")){
            return R.drawable.flag_srilanka;
        }
        if(teamName.equals("New Zealand")){
            return R.drawable.flag_new_zealand;
        }
        if(teamName.equals("Pakistan")){
            return R.drawable.flag_pakistan;
        }
        if(teamName.equals("Srilanka")){
            return R.drawable.flag_srilanka;
        }
        if(teamName.equals("South Africa")){
            return R.drawable.flag_south_africa;
        }
        if(teamName.equals("Austalia")){
            return R.drawable.flag_australia;
        }
        return R.drawable.flag_defau<
    }
  

Приведенный выше код работает корректно.

Теперь я хочу добавить больше округов и флагов. Есть ли какой-либо способ уменьшить количество строк кода? Нравится return R.drawable.flag underscorise(teamName);

Комментарии:

1. imageFlagRight.setImageResource(getFlagResource(«Индия»)); В этой строке кода вы динамически передали india

2. Нет, в реальном времени это похоже imageFlagRight.setImageResource(getFlagResource(anObjectFromMatchList.getTeamName()));

3. вам не нужен метод getFlagResource(), вы просто используете нижеприведенную строку обычно для всех изображений TeamImages imageFlagRight.setImageResource(R.drawable.flag_ TeamName); где TeamName — строка. Передал название команды и получил результат

4. @ Ayudh вы не можете просто добавить вот так

Ответ №1:

 String name="flag_"   "india";
public int getFlagResource(Context context, String name) {
   int resId = context.getResources().getIdentifier(name, "drawable", "com.mypackage.namehere");
   return resId;
}
  

Попробуйте этот.

Ответ №2:

Вы должны сохранить название страны и R.id Значения….

Когда вы хотите получить эти значения и отобразить их

Ответ №3:

При участии @Saurabh Pareek

 private int getFlagResource(String teamName) {
         String flagString = "flag_" teamName.replace(" ", "_").toLowerCase();
         int resId = getContext().getResources().getIdentifier(flagString, "drawable", "com.mypackage.namehere");
         if(resId != 0){
             return resId;
         }
         return R.drawable.flag_defau<
    }
  

Ответ №4:

 <yourimageview>.setImageViewResource(getFlagResource("india"));