Почему я получаю это исключение?
05-18 20:29:38.044: ERROR/AndroidRuntime(5453): java.lang.IllegalArgumentException: The key must be an application-specific resource id.
05-18 20:29:38.044: ERROR/AndroidRuntime(5453): at android.view.View.setTag(View.java:7704)
05-18 20:29:38.044: ERROR/AndroidRuntime(5453): at com.mypkg.viewP.inflateRow(viewP.java:518)
рассматриваемая строка:
((Button) row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);
и я определил это как:
private static final int TAG_ONLINE_ID = 1;
android
illegalargumentexception
Pentium10
источник
источник
Причина, по которой вы не можете использовать setTag (int, Object), заключается в том, что для android требуется предварительно скомпилированный уникальный идентификатор в аргументе 'int'.
Попробуйте создать две уникальные записи в String.xml xml, скажем, «имя» и «имя» и используйте их, как показано ниже
источник
Я немного опоздал на вечеринку, но сегодня я сам наткнулся на эту проблему и подумал, что тоже дам ответ. Этот ответ будет немного обобщением других ответов, но с изюминкой. Прежде всего, id, как было указано другими, НЕ может быть константой, определенной в вашем коде (например, private static final int MYID = 123) или любым другим int, который вы определяете как поле где-либо.
Идентификатор должен быть предварительно скомпилированным уникальным идентификатором, точно так же как те, которые вы получаете для строк, которые вы помещаете в values / strings.xml (т.е. R.string.mystring). Обратитесь к http://developer.android.com/guide/topics/resources/available-resources.html и http://developer.android.com/guide/topics/resources/more-resources.html для получения дополнительной информации.
Я предлагаю вам создать новый файл под названием values / tags.xml и написать:
Я думаю, что лучше создать отдельный файл, а не помещать его в strings.xml, как предложил EtienneSky.
источник
<item name="TAG_ONLINE_ID" type="id"/>
чтобы упростить.R.id...
, а неR.string..
илиR.tags...
ЭТО ДЕЛАЕТ РАБОТУ ...
Если у вас есть только 1 setTag в вашем классе, вы можете использовать любой int, может быть static final, объявленный в верхней части.
Проблема возникает, когда у вас есть 2 или более setTag с разными ключами. Я имею в виду:
Этот сценарий неверен. Затем вам нужно добавить файл значений с именем возможно ids.xml со следующим:
Затем в вашем классе позвоните:
источник
должно сработать. Больше информации от ceph3us :
из источника:
источник
Я использовал
viewHolder.itemTitleTextView.getId()
. Но вы также можете заявить в своих ресурсах:<item type="id" name="conversation_thread_id"/>
источник
Это работает для меня:
источник
Причина, по которой вы хотите сохранить значение по идентификатору, заключается в том, что вы хотите охватить более одного значения в этом теге, верно?
Вот более простое решение:
допустим, вы хотите сохранить в этом теге два значения (строки): «имя» и «фамилия». Вы можете сохранить их в одну строку, разделив их точкой с запятой:
... и получить к ним доступ, разбив их на строковый массив:
источник
Вы можете использовать это:
private static final int TAG_ONLINE_ID = View.generateViewId() + 2 << 24;
для уникального идентификатора ресурса приложения
источник