Actuellement, j'ai ajouté les champs dynamiques TextInputEditText au LinearLayout où tous les champs ajoutés dynamiquement sont stockés (ne contient que les champs EditText dynamiques).
Cependant, lorsque je lis chaque champ EditText et récupère ses données, la valeur du dernier champ de texte remplace toutes les autres valeurs du tableau.

Exemple:
Ajoute 3 champs dynamiques, avec les valeurs correspondantes de "AA", "BB", "CC". Quand je lis le tableau, ça montre comme ça,

Sortie : "CC, CC, CC"

Code:

private void fetchCertificates(){

    ArrayList<String> certs = new ArrayList<>();

    for(int i =0;i<linearLayout.getChildCount();i++){

        View certificateView = linearLayout.getChildAt(i);

        TextInputEditText newCerts = findViewById(R.id.new_certs);
        String name = newCerts.getText().toString();
        certs.add(name);
    }

    String certList = android.text.TextUtils.join(",", certs);
    Log.i("Certificates",certs);
}

Objectif: Lisez TextInputEditText ajouté dynamiquement et stockez les valeurs dans un tableau.

Références : page -1 (cela n'a pas fonctionné)

1
Rooster 23 août 2020 à 08:45

2 réponses

Meilleure réponse

J'ai pu le résoudre de la manière suivante, merci pour les questionnements hellboy et blackapps, cela m'a fait penser un peu différemment.

Private void fetchCertificates () {

ArrayList<String> certs = new ArrayList<>();

for(int i =0;i<linearLayout.getChildCount();i++){

    View certificateView = linearLayout.getChildAt(i);

    TextInputEditText newCerts = certificateView.findViewById(R.id.new_certs);
    String name = newCerts.getText().toString();
    certs.add(name);
}

String certList = android.text.TextUtils.join(",", certs);
Log.i("Certificates",certs);

}

1
Rooster 23 août 2020 à 06:24

Le problème dans votre code est à ces lignes,

    View certificateView = linearLayout.getChildAt(i);
    TextInputEditText newCerts = findViewById(R.id.new_certs);

En supposant que LinearLayout (parent) ne porte que TextInputEditText (enfants), lorsque vous itérez à travers LinearLayout, vous obtiendrez uniquement TextInputEditText, donc votre code devrait être comme,

    View certificateView = linearLayout.getChildAt(i);
    TextInputEditText newCerts = (TextInputEditText) certificateView;

Ou

    TextInputEditText newCerts = (TextInputEditText) linearLayout.getChildAt(i);

Dans votre code, puisque vous avez utilisé directement findViewById, vous avez toujours la dernière à la dernière vue (enfant) avec cet identifiant (rappelez-vous s'il y a plusieurs vues avec le même identifiant, alors la dernière vue définie, à la fois dans Activité ou dans la mise en page , sera récupéré) c'est la raison pour laquelle vous obtenez CC, CC, CC.

0
Sanjevi Naidu 23 août 2020 à 06:19