Android: View.setID(int id) mediante programación: ¿cómo evitar conflictos de ID?
Estoy agregando TextViews mediante programación en un bucle for y los agrego a una ArrayList.
¿ Cómo lo uso TextView.setId(int id)
? ¿Qué ID entero se me ocurre para que no entre en conflicto con otros ID?
Desde el nivel API 17 y superior, puede llamar a: View.generateViewId()
Luego use View.setId(int) .
Si su aplicación tiene como objetivo un nivel inferior a API 17, use ViewCompat.generateViewId()
Puedes definir los ID que usarás más adelante en R.id
clase usando un archivo de recursos xml y dejar que el SDK de Android establezca los valores únicos reales durante el tiempo de compilación.
res/values/ids.xml
<item name="my_edit_text_1" type="id"/>
<item name="my_button_1" type="id"/>
<item name="my_time_picker_1" type="id"/>
Para usarlo en el código:
myEditTextView.setId(R.id.my_edit_text_1);
Según View
la documentación
No es necesario que el identificador sea único en la jerarquía de esta vista. El identificador debe ser un número positivo.
Por lo tanto, puede utilizar cualquier número entero positivo que desee, pero en este caso puede haber algunas vistas con identificaciones equivalentes. Si desea buscar alguna vista en la jerarquía, setTag
puede resultar útil llamar a algunos objetos clave.
También puedes definir ids.xml
en res/values
. Puedes ver un ejemplo exacto en el código de muestra de Android.
samples/ApiDemos/src/com/example/android/apis/RadioGroup1.java
samples/ApiDemp/res/values/ids.xml
Desde API 17, la View
clase tiene un método estático generateViewId()
que
generar un valor adecuado para usar en setId(int)