Мне нужно передать идентификатор ресурса в метод в одном из моих классов. Необходимо использовать как идентификатор, на который указывает ссылка, так и строку. Как мне лучше всего достичь этого?
Например:
R.drawable.icon
Мне нужно получить целочисленный идентификатор этого, но мне также нужен доступ к строке «значок».
Было бы предпочтительнее, если бы все, что я должен был передать методу, это строка "icon".
Ответы:
@EboMike: я не знал, что
Resources.getIdentifier()
существует.В своих проектах я использовал следующий код для этого:
Это будет использоваться для получения значения
R.drawable.icon
целочисленного значения ресурса.Я только что нашел сообщение в блоге, говорящее, что
Resources.getIdentifier()
это медленнее, чем использование отражения, как я сделал. Проверьте это .источник
getIdentifier()
необходимо выполнить два поиска отражений. В приведенном выше примере для получения идентификатора ресурсаgetIdentifier()
будет использоваться отражениеDrawable.class
, а затем другой поиск отражения. Это было бы причиной разницы в скорости. При этом ни один из них не является особенно быстрым и, следовательно, действительно должен быть кэширован (особенно если используется в цикле или для строк в aListView
). И большая проблема подхода отражения состоит в том, что он делает предположения о внутренностях Android, которые могут измениться в некоторых будущих выпусках.context
параметр?Вы можете использовать эту функцию для получения идентификатора ресурса.
Так что если вы хотите получить для рисования функцию вызова, как это
и для строки вы можете назвать это так
Прочитайте это
источник
Это основано на ответе @Macarse.
Используйте это, чтобы получить идентификатор ресурса более быстрым и дружественным к коду способом.
Пример:
источник
Как получить заявку идентификатор ресурса из имени ресурса - довольно распространенный и хорошо отвеченный вопрос.
Как получить собственный идентификатор ресурса Android из имени ресурса, ответ на этот вопрос не так хорош. Вот мое решение получить Android-ресурс для рисования по имени ресурса:
Метод может быть изменен для доступа к другим типам ресурсов.
источник
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ return mContext.getDrawable(resourceId); } else { return mContext.getResources().getDrawable(resourceId); }
Если вам нужно соединить строку и int, тогда как насчет Map?
источник
Вы можете использовать
Resources.getIdentifier()
, хотя вы должны использовать формат для строки , как вы использовать его в XML - файлах, то естьpackage:drawable/icon
.источник
getResourceEntryName(id)
чтобы найти имя строки. Не возиться, чтобы найти "значок" из длинного текста.Мне понравилось, это работает для меня:
источник
источник
источник
getIdentifier
должен бытьid
. Это не было даже упомянуто на сайте разработчика Android. откуда ты взял эту информацию?Поскольку вы сказали, что хотите передать только один параметр, и не важно, какой, вы можете передать идентификатор ресурса и затем найти для него строковое имя, таким образом:
Это может быть наиболее эффективным способом получения обоих значений. Вам не нужно возиться, находя только часть «иконки» из более длинной строки.
источник
В вашем res / layout / my_image_layout.xml
Чтобы получить этот ImageView по значению @ + id, внутри вашего Java-кода сделайте следующее:
источник
Котлинский подход
Использование:
источник
В MonoDroid / Xamarin.Android вы можете сделать:
Но поскольку GetIdentifier не рекомендуется в Android - вы можете использовать Reflection следующим образом:
где я предлагаю поставить попытку / поймать или проверить строки, которые вы передаете.
источник
Для получения Drawable id из имени ресурса String я использую этот код:
источник