Mi aplicación consiste en crear encuestas. Para hacerlo, el usuario debería poder crear nuevos campos dinámicamente.Inflar una vista varias veces en el mismo elemento primario cuando se hace clic en un botón
Por lo tanto, al crear una nueva encuesta, se muestra una actividad con solo 2 botones (agregar y eliminar). Cuando un usuario hace clic en el botón Agregar, aparece una fila que contiene un EditText (para que pueda escribir la pregunta), un Spinner (que permite al usuario seleccionar el tipo de campo: texto, RadioButton, CheckBox, etc.) y otro EditText (en el que se escriben las diferentes opciones de respuesta disponibles, si corresponde).
Para lograr esto, creé un archivo XML que contiene estos widgets y cada vez que el usuario hace clic en el botón Agregar, el XML se infla. Funciona la primera vez que presiono el botón, pero después de eso ... no pasa nada.
Leí en alguna parte que no se puede inflar el mismo niño 2 veces en un padre a menos que se haga en un bucle.
Por lo tanto, mis preguntas son:
-> ¿Cómo puedo evitar esto y obtener el efecto deseado?
-> ¿Por qué no se aplica esto en un bucle?
Se agradece cualquier ayuda o sugerencia. Una vez más, muchas gracias por todo el apoyo que la comunidad me ha brindado.
NOTA: En la documentación de Android hablan sobre la clonación de un inflador pero la información allí es escasa y no pude encontrar ninguna otra información al respecto. código
Fuente:
XML - cointainer principal:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/wrapper"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/mds_new_addfield_button"
android:tag="new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add Field"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
/>
<Button
android:id="@+id/mds_new_deletefield_button"
android:tag="delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Delete Field"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
XML -Inflated:
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TableRow>
<TextView
android:id="@+id/mdsnew_field_tv"
style="@style/dsn_field"
android:text="Field Name "
/>
<TextView
android:id="@+id/mdsnew_type_tv"
style="@style/dsn_field"
android:text="Type of Field "
/>
<TextView
android:id="@+id/mdsnew_choices_tv"
style="@style/dsn_field"
android:text="Choices"
/>
</TableRow>
<TableRow>
<EditText
android:id="@+id/mdsnew_fieldname_et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Field Name"
android:textSize="18sp"
/>
<Spinner
android:id="@+id/mdsnew_type_sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/mdsnew_choices_et"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Choices "
android:textSize="18sp"
/>
</TableRow>
</TableLayout>
Añadir Botón:
LinearLayout myRoot = (LinearLayout) findViewById(R.id.wrapper);
LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.mds_new_row, myRoot);
Puede inflar al mismo niño dos o más veces. Lo que no puede hacer es usar la misma instancia de una vista más de una vez. Cada vez que llamas al método 'inflate' de' LayoutInflater' estás creando una nueva 'Vista' por lo que no deberías tener problemas con la forma en que estás haciendo las cosas. Entonces ... puede ser que el error esté en otro lugar ... ¿podría compartir los archivos XML (el contenedor y el que está inflado en tiempo de ejecución)? Además, el fragmento de código donde infle su Vista será útil. – Cristian
¡Editó la publicación para incluir lo que pidió! (¡gracias por su ayuda!) – Tivie
¿Cómo recuperará la identificación de cada vista? – Janmejoy