Entonces, tengo una actividad en mi aplicación que agrega y elimina campos dinámicamente y, de manera predeterminada, ya hay un campo allí. La ruleta original contiene toda la información y puedo seleccionar cualquier objeto allí, sin embargo, las ruletas agregadas dinámicamente están vacías. ¿Cómo agregaría dinámicamente una ruleta poblada? Intenté perder el tiempo llamando a un método de poblado en el método addField, pero eso no ayudó e hizo las cosas más raras. Así es como se ve cuando agrego nuevos campos: ingrese la descripción de la imagen aquí

Aquí está el método que agrega campos:

public void addField(View v) {
        if(parentLayout.getChildCount() < maxCourses) {
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            final View rowView = inflater.inflate(R.layout.field, null);
            //add new row before add field button
            parentLayout.addView(rowView, parentLayout.getChildCount() - 1);
        } else {
            Toast.makeText(this, "No more than " + maxCourses + " courses\ncan be taken per semester", Toast.LENGTH_SHORT).show();
        }
    }

Y así es como lo llamo a través de un botón "AGREGAR CURSO"

addFieldBtn = findViewById(R.id.add_field_btn);
        addFieldBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addField(v);
            }
        });

Aquí está el código field.XML para los campos recién generados, comparten el mismo ID que el campo poblado original

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="@color/colorSecondaryDark"
    android:layout_alignParentBottom="true">

    <Spinner
        android:id="@+id/first_spinner"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:spinnerMode="dropdown" />

    <Button
        android:id="@+id/remove_field_button"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@color/colorSecondary"
        android:gravity="center"
        android:onClick="removeField"
        android:text="REMOVE\nCOURSE"
        android:textSize="12sp" />

</LinearLayout>

Si alguien me puede dar algunos consejos o ayuda, ¡se lo agradecería!

0
Coda759 26 oct. 2019 a las 10:27

1 respuesta

La mejor respuesta

Los nuevos hilanderos no saben dónde obtener los datos. Debe configurar un adaptador para cada uno de los nuevos hilanderos. Como aquí:

public void addField(View v) {
    if(parentLayout.getChildCount() < maxCourses) {
        LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        final View rowView = inflater.inflate(R.layout.field, null);
        Spinner spinner = rowView.findViewById(R.id.first_spinner);
        ArrayAdapter<String> arrayAdapter = getAnAdapterForThatSpinner();
        spinner.setAdapter(arrayAdapter)
        //add new row before add field button
        parentLayout.addView(rowView);
    } else {
        Toast.makeText(this, "No more than " + maxCourses + " courses\ncan be taken per semester", Toast.LENGTH_SHORT).show();
    }
}
1
Islam Madeniyat 26 oct. 2019 a las 08:19