Android: View.setID(int id) mediante programación: ¿cómo evitar conflictos de ID?

Resuelto znq asked hace 54 años • 14 respuestas

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?

znq avatar Jan 01 '70 08:01 znq
Aceptado

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()

X.Y. avatar Mar 15 '2013 22:03 X.Y.

Puedes definir los ID que usarás más adelante en R.idclase 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);
Sai Aditya avatar Apr 05 '2014 05:04 Sai Aditya

Según Viewla 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, setTagpuede resultar útil llamar a algunos objetos clave.

Nikolay Ivanov avatar Nov 11 '2009 11:11 Nikolay Ivanov

También puedes definir ids.xmlen 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
yenliangl avatar Nov 27 '2009 10:11 yenliangl

Desde API 17, la Viewclase tiene un método estático generateViewId() que

generar un valor adecuado para usar en setId(int)

Diederik avatar Feb 20 '2013 08:02 Diederik