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:
Строковое имя и рефлексия тоже должны работать, но, вероятно, немного перебор, у вас есть только несколько значков.