2014-01-25 3 views
0

Недавно у меня возникла проблема, очень похожая на описанную здесь: Convert String containing an ID into an Integer-ID.Как получить идентификатор целочисленного ресурса из строки, содержащей идентификатор (например: R.string. *, R.drawable. * И т. Д.)?

Короче говоря, у меня были идентификаторы ресурсов, отформатированные как: R.drawable.picture и хотели преобразовать их в целые значения, чтобы они могли быть сохранены в массиве и доступны методами построения макетов моего приложения.

Однако, следуя подсказкам, данным Пользователями, не помогло решить мою проблему, я всегда получал неверно отформатированные данные.

ответ

1

Ищете решение, я пришел к описанному ниже.

Детали:

  • строки, содержащие идентификаторы ресурсов были сохранены в базе данных,
  • полные адреса ресурсов были использованы для описания их (так, например: R.drawable.chopin вместо простого chopin - иногда вы можете забыть что на самом деле скрыто за ресурсом: это изображение или строка, на которые он указывает? Сохранение полных идентификаторов не позволяет забыть о их типах),
  • Идентификаторы ресурсов были получены методом в виде строк (также хранящихся в база данных равна text), а затем pars ed в целые идентификаторы.

Во-первых, контекст должен был быть определен:

public DBAdapter(Context context) { 
    this.context = context; 
    dbHelper = new dbHelper(); 
} 

Как я был контекст, я мог бы разобран строки:

int composerPicture = context.getResources(). 
     getIdentifier(composerPictureId.substring(11), "drawable", 
     context.getPackageName()); 

и:

int composerName = context.getResources(). 
     getIdentifier(composerNameAddress.substring(9), "string", 
     context.getPackageName()); 

Обратите внимание на количество символов, которые мы отключили, используя substring() способ. Когда идентификатор начинается с R.drawable., у нас есть 11 символов, и это значение необходимо отрезать. Если есть R.string., мы обрезаем только 9 символов. Таким образом, мы получаем чистое имя нашего ресурса (в данном случае - drawable или string). Методы назначают идентификатор, и мы имеем целое число. После этого мы можем сохранить его в ArrayList<Integer> или где-нибудь еще.

+1

Возможно, вы просто использовали Reflection;) –

Смежные вопросы