Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo asignar id únicos a las vistas creadas dinámicamente?

En mi aplicación estoy creando Views – en este caso un EditText – dinámicamente. Pero cada View que agrego necesita tener un identificador único.

 EditText editText = new EditText(context); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); editText.setLayoutParams(params); // Which value am I supposed to use here? editText.setId(value); layout.addView(editText); 

Tengo miedo de los conflictos si asigno un valor aleatorio y no puedo pensar en ninguna forma de generar ids sin la posibilidad de conflictos.

Por favor, no que sé que se puede definir un conjunto fijo de ids en res / values ​​/ ids.xml, pero eso no es lo que quiero! ¡Necesito crear los ids dinámicamente! No tengo idea de cuántos necesito.

Entonces, ¿hay alguna manera segura de generar IDs?

2 Solutions collect form web for “¿Cómo asignar id únicos a las vistas creadas dinámicamente?”

Asignar id mediante código (mediante programación)

  • Configurar manualmente los id usando someView.setId( int );
  • El int debe ser positivo, pero de lo contrario arbitrario, puede ser lo que quieras (sigue leyendo si esto es espantoso.)
  • Por ejemplo, si crea y numeró varias vistas que representan elementos, podría utilizar su número de artículo.

Normalmente lo hacemos:

Para asignar id –

 for(int i =0 ; i < yourIDcount ; i++){ yourView.setId(i); } 

Para obtener id –

 View.findViewById(yourView.getId()); 

También,

API 17 introdujo View.generateViewId() que genera una ID única.

Comprobar:

How-can-i-assign-an-id-to-a-view-programmatically y android-assign-and-retrieve-ids-dinámicamente .

Hay varias formas en las que puede generar ids de forma fiable para sus Views . Algunos pueden ser utilizados para generar dinámicamente ids en tiempo de ejecución, otros pueden ser utilizados para definir de forma estática un número fijo de ids. Voy a repasar algunas soluciones en esta respuesta.


Creación estática de un número fijo de ids

Cree un nuevo archivo xml en res / values ​​llamado ids.xml y añada elementos con el tipo id:

 <?xml version="1.0" encoding="utf-8"?> <resources> <item name="name" type="id" /> <!-- Creates the id R.id.name --> <item name="example" type="id" /> <!-- Creates the id R.id.example --> </resources> 

¡También puedes generar IDs para otros recursos! Sólo cambia el tipo.


Generación dinámica de identificadores desde el nivel API 17+

Con el nivel 17 de API, se agregó un nuevo método a la clase View :

 int id = View.generateViewId(); 

¡Con él usted puede crear tantos ids como usted necesita dinámicamente!


Generación dinámica de identificadores antes del nivel API 17

Como @Apoorv sugirió que puede ver el código fuente de generateViewId() aquí . Al copiar el código, podemos usar este método incluso antes del nivel 17 de la API:

 private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1); public static int generateViewId() { for (; ; ) { final int result = sNextGeneratedId.get(); // aapt-generated IDs have the high byte nonzero; clamp to the range under that. int newValue = result + 1; if (newValue > 0x00FFFFFF) newValue = 1; // Roll over to 1, not 0. if (sNextGeneratedId.compareAndSet(result, newValue)) { return result; } } } 

¡Apenas incluyelo en una clase del ayudante y usted está todo fijado!

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.