Por que recebo essa exceção?
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)
a linha em questão é:
((Button) row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);
e eu tenho isso definido como:
private static final int TAG_ONLINE_ID = 1;
android
illegalargumentexception
Pentium10
fonte
fonte
O motivo pelo qual você não é capaz de usar setTag (int, Object) é porque o Android exige um ID exclusivo pré-compilado no argumento 'int'.
Tente criar duas entradas exclusivas em String.xml xml, diga "primeiro nome" e "segundo nome" e use-as como abaixo
fonte
Estou um pouco atrasado para a festa, mas hoje me deparei com esse problema e pensei em dar uma resposta também. Esta resposta será um pouco de compilação das outras respostas, mas com um toque. Primeiro, o ID, como foi apontado por outras pessoas, NÃO pode ser uma constante definida no seu código (como estática privada final int MYID = 123) ou qualquer outro int que você defina como um campo em algum lugar.
O ID deve ser um ID exclusivo pré-compilado, assim como os obtidos por strings que você coloca em values / strings.xml (por exemplo, R.string.mystring). Consulte http://developer.android.com/guide/topics/resources/available-resources.html e http://developer.android.com/guide/topics/resources/more-resources.html para obter mais informações.
Minha sugestão é que você crie um novo arquivo chamado values / tags.xml e escreva:
Eu acho que é melhor criar um arquivo separado em vez de colocá-lo em strings.xml, como sugerido pelo EtienneSky.
fonte
<item name="TAG_ONLINE_ID" type="id"/>
simplificar.R.id...
, e nãoR.string..
ouR.tags...
ISSO FAZ O TRABALHO ...
Se você tiver apenas 1 setTag em sua classe, poderá usar qualquer final int, talvez estático declarado no topo.
O problema surge quando você tinha 2 ou mais setTag's com chaves diferentes. Quero dizer:
Esse cenário está errado. Você precisará adicionar um arquivo de valor chamado talvez ids.xml com o seguinte:
Então, na sua turma, ligue para:
fonte
Deveria trabalhar. Mais informações de ceph3us :
da fonte:
fonte
Eu já usei
viewHolder.itemTitleTextView.getId()
. Mas você também pode declarar em seus recursos:<item type="id" name="conversation_thread_id"/>
fonte
Isso funciona para mim:
fonte
O motivo pelo qual você deseja salvar o valor por um ID é que deseja cobrir mais de um valor nessa tag, certo?
Aqui está uma solução mais simples:
digamos que você queira salvar dois valores (Strings) nessa tag: "firstname" e "lastname". Você pode salvar os dois em uma sequência, separada por ponto e vírgula:
... e acesse-os dividindo-os em uma matriz de strings:
fonte
você pode usar isso:
private static final int TAG_ONLINE_ID = View.generateViewId() + 2 << 24;
para identificação de recurso específico do aplicativo uniqness
fonte