Android: возможность смены идентификатора после изменения ресурсов
У меня есть приложение для Android, которое использует компонент галереи, чтобы выбрать значок и назначить его кнопке.
Набор значков находится в папке res/drawable
и доступен в галерее с типичным адаптером руководства:
private Integer[] Imgid = {
R.drawable.icon_home,
R.drawable.icon_home2,
...
}
После выбора значка я сохранил настройки в db с идентификатором кнопки и с возможностью выгрузки.
Все работы выполнены, но я заметил, что если я захочу добавить или изменить свой набор значков или ресурсы в общем своем приложении, идентификаторы старого ресурса могут измениться, поэтому предпочтения в db относятся к неправильному значку.
Есть ли способ заставить старый идентификатор класса R, чтобы они не изменились в будущем? Или есть другой способ управлять элементом компонентной галеры с другим атрибутом, чем id? (возможно, имя и отражение строки?)
Заранее спасибо
Ответы
Ответ 1
Вы можете сохранить имя извлекаемого в базе данных, если вы не планируете его изменять. getResourceEntryName
возвращает имя из идентификатора ресурса:
Resources resources = getResources();
String name = resources.getResourceEntryName(R.drawable.icon);
И вы можете вернуть идентификатор ресурса из имени с помощью getIdentifier
:
int resId = resources.getIdentifier(name, "drawable", "your.package.name");
Ответ 2
Вы не можете использовать статический int для идентификатора ресурса, однако вы должны посмотреть на два метода od Resources
class:
getIdentifier()
getresourceName()
Ответ 3
Вы не должны полагаться на фактические значения атрибутов R.drawable.*
.
Создайте свои собственные идентификаторы (например, 1 соответствует R.drawable.icon_home
и 2 соответствуют R.drawable.icon_home2
)
Edit:
Строковое имя и рефлексия тоже должны работать, но, вероятно, немного перебор, у вас есть только несколько значков.