Mengapa saya mendapatkan Pengecualian ini?
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)
baris yang dimaksud adalah:
((Button) row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);
dan saya mendefinisikannya sebagai:
private static final int TAG_ONLINE_ID = 1;
android
illegalargumentexception
Pentium10
sumber
sumber
Alasan Anda tidak dapat menggunakan setTag (int, Object) adalah karena android memerlukan id unik yang dikompilasi sebelumnya dalam argumen 'int'.
Coba buat dua entri unik di String.xml xml katakan, "firstname" & "secondname" & gunakan seperti di bawah ini
sumber
Saya agak terlambat ke pesta, tetapi saya sendiri tersandung masalah ini hari ini dan berpikir saya akan memberikan jawaban juga. Jawaban ini akan sedikit kompilasi dari jawaban yang lain, tetapi dengan twist. Pertama-tama, id, seperti yang telah ditunjukkan oleh orang lain, TIDAK dapat berupa konstanta yang didefinisikan dalam kode Anda (seperti MYID int final statis swasta = 123) atau int lain yang Anda tetapkan sebagai bidang di suatu tempat.
Id harus berupa id unik yang dikompilasi, sama seperti id yang Anda dapatkan untuk string yang Anda masukkan ke nilai / strings.xml (yaitu R.string.mystring). Lihatlah http://developer.android.com/guide/topics/resources/available-resources.html dan http://developer.android.com/guide/topics/resources/more-resources.html untuk informasi lebih lanjut.
Saran saya adalah Anda membuat file baru bernama values / tags.xml dan menulis:
Saya pikir lebih baik membuat file terpisah daripada meletakkannya di strings.xml seperti yang disarankan EtienneSky.
sumber
<item name="TAG_ONLINE_ID" type="id"/>
untuk menyederhanakan.R.id...
, dan bukanR.string..
atauR.tags...
INI AKAN MELAKUKAN PEKERJAAN ...
Jika Anda hanya memiliki 1 setTag di kelas Anda, Anda bisa menggunakan int, mungkin final statis yang dideklarasikan di atas.
Masalahnya muncul ketika Anda memiliki 2 setTag atau lebih dengan kunci yang berbeda. Maksudku:
Skenario itu salah. Anda kemudian perlu menambahkan file nilai yang disebut mungkin ids.xml dengan yang berikut:
Kemudian, di kelas Anda, hubungi:
sumber
harus bekerja. Info lebih lanjut dari ceph3us :
dari sumber:
sumber
Saya sudah menggunakan
viewHolder.itemTitleTextView.getId()
. Tetapi Anda juga dapat mendeklarasikan dalam sumber daya Anda:<item type="id" name="conversation_thread_id"/>
sumber
Ini bekerja untuk saya:
sumber
Alasan mengapa Anda ingin menyimpan nilai dengan id adalah, bahwa Anda ingin mencakup lebih dari satu nilai dalam tag ini, bukan?
Di sini solusi yang lebih sederhana:
Katakanlah Anda ingin menyimpan dua nilai (Strings) ke dalam tag ini: "firstname" dan "lastname". Anda dapat menyimpan keduanya dalam satu string, dipisahkan dengan titik koma:
... dan mengaksesnya dengan membaginya menjadi string array:
sumber
Anda bisa menggunakan ini:
private static final int TAG_ONLINE_ID = View.generateViewId() + 2 << 24;
untuk uniqness id sumber daya khusus aplikasi
sumber