Подтвердить что ты не робот

Как установить исходный код ImageViews на Android?

Я делаю сложный элемент ui, который принимает объект (игрок), и я хочу выбрать соответствующий образ для команды, в которую играет этот игрок (у объекта игрока есть строковое значение для его номера изображения. У меня есть изображения в папке ресурсов моего проекта.

Как указать правильный источник для каждого игрока. Это случай написания огромного количества if и elses (проверка строкового значения) и использование res.getDrawable(R.drawable.no1) и т.д. Или есть более элегантное решение, где я могу каким-то образом использовать строку путь к источнику?

4b9b3361

Ответ 1

Я бы установил связь между строками и изображениями на карте:

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("blah", R.drawable.blah);
// etc...

Затем вы можете использовать метод setImageResource(int):

ImageView image;
image.setImageResource(map.get("blah"));

Или, если строки имеют то же имя, что и изображение (как в случае раньше), вы можете загрузить ресурс с помощью этого метода: Android и получить представление с идентификатором как строка

Ответ 3

Если я правильно понял, вы хотите отобразить ресурс изображения из строки. Я делаю это в приложении, где пользователь может выбрать изображение из пользовательского ListPreference и отображается в макете MainActivity. Идентифицируемый идентификатор ресурса хранится в SharedPreferences в виде строки, которая соответствует примеру идентификатора ресурса (String): "@drawable/logo_image". Я вытаскиваю значение ListPreference с помощью:

    SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE);
            String logo_id = (shared.getString("pref_logo",""));

Возвращает ресурс, который можно вытащить, в виде строки i.e. @drawable/logo_image. Затем, чтобы вставить этот drawable/image в мой макет, я использую:

    ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo);
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage"));

Это изменит ресурс ImageView на новый drawable с помощью setImageResource(), используя int, возвращаемый методом ниже, который возвращает идентификатор (int) из строки, представляющей ресурс, пригодный для выгрузки в com.yourpackage:

    getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")

Вы также можете использовать этот же метод для изменения других ресурсов, которые используют drawable, таких как фоновые рисунки макета и т.д. Вам просто нужно использовать этот метод, чтобы получить ID как int:

    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")