¿Por qué obtengo esta excepción?
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)
La línea en cuestión es:
((Button) row.findViewById(R.id.btnPickContact)).setTag(TAG_ONLINE_ID,objContact.onlineid);
y lo tengo definido como:
private static final int TAG_ONLINE_ID = 1;
android
illegalargumentexception
Pentium10
fuente
fuente
La razón por la que no puede usar setTag (int, Object) es porque Android requiere una identificación única precompilada en el argumento 'int'.
Intente crear dos entradas únicas en String.xml xml, diga "nombre" y "segundo nombre" y utilícelas como se muestra a continuación
fuente
Llego un poco tarde a la fiesta, pero hoy me topé con este problema y pensé que también daría una respuesta. Esta respuesta será una compilación de las otras respuestas, pero con un giro. En primer lugar, la identificación, como lo han señalado otros, NO puede ser una constante definida en su código (como int privado estático final MYID = 123) o cualquier otra int que defina como un campo en alguna parte.
La identificación debe ser una identificación única precompilada, al igual que las que obtiene para las cadenas que coloca en valores / strings.xml (es decir, R.string.mystring). Consulte http://developer.android.com/guide/topics/resources/available-resources.html y http://developer.android.com/guide/topics/resources/more-resources.html para obtener más información.
Mi sugerencia es que cree un nuevo archivo llamado values / tags.xml y escriba:
Creo que es mejor crear un archivo separado en lugar de ponerlo en strings.xml como EtienneSky sugirió.
fuente
<item name="TAG_ONLINE_ID" type="id"/>
para simplificar.R.id...
, y noR.string..
oR.tags...
ESTO HARÁ EL TRABAJO ...
Si solo tiene 1 setTag en su clase, puede usar cualquier int, tal vez estático final declarado en la parte superior.
El problema surge cuando tenías 2 o más setTag's con diferentes claves. Quiero decir:
Ese escenario está mal. Luego debe agregar un archivo de valor llamado quizás ids.xml con lo siguiente:
Luego, en tu clase, llama al:
fuente
Deberia trabajar. Más información de ceph3us :
de fuente:
fuente
He usado
viewHolder.itemTitleTextView.getId()
. Pero también puedes declarar en tus recursos:<item type="id" name="conversation_thread_id"/>
fuente
Esto funciona para mi:
fuente
La razón por la que desea guardar el valor mediante una identificación es que desea cubrir más de un valor en esta etiqueta, ¿verdad?
Aquí una solución más simple:
supongamos que desea guardar dos valores (cadenas) en esta etiqueta: "nombre" y "apellido". Puede guardarlos en una cadena, separados por punto y coma:
... y acceder a ellos dividiéndolos en una matriz de cadenas:
fuente
puedes usar esto:
private static final int TAG_ONLINE_ID = View.generateViewId() + 2 << 24;
para uniqness id. de recurso específico de la aplicación
fuente