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?

  • ¿Cómo puedo obtener de forma confiable un color de un AttributeSet?
  • Android Error: Debe proporcionar el atributo layout_width
  • Cambiar el color del texto de TimePicker
  • Implementación de SeekBar simple en android
  • Leer de forma programada Estado de depuración en Manifest
  • Hacer texto en negrita y cursiva
  • Android EditText siguiente foco
  • Cómo convertir una imagen en cadena base64
  • 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.