web-dev-qa-db-fra.com

Comment obtenir des données de chaque EditText créé dynamiquement dans Android?

J'ai réussi à créer EditTexts en fonction de l'entrée utilisateur dans Android, et je leur ai également attribué des ID uniques à l'aide de la méthode setId().

Maintenant, ce que je veux faire, c'est obtenir des valeurs à partir des EditTexts créés dynamiquement lorsque l'utilisateur appuie sur un bouton, puis les stocker tous dans des variables String. c'est-à-dire que la valeur de EditText ayant l'ID '1' doit être enregistrée dans str1 de type String, et ainsi de suite en fonction du nombre de EditTexts.

J'utilise les méthodes getid() et gettext().toString() mais cela semble un peu délicat ... Je ne peux pas affecter chaque valeur de EditText à une variable String. Lorsque j'essaie de le faire, un NullPointerException se produit et si ce n'est pas le cas où aucune donnée d'entrée utilisateur n'est affichée, je l'affiche dans un toast.

Heres, le code:

EditText ed;

for (int i = 0; i < count; i++) {   

        ed = new EditText(Activity2.this);
        ed.setBackgroundResource(R.color.blackOpacity);
        ed.setId(id);   
        ed.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        linear.addView(ed);

}

Comment passer maintenant la valeur de chaque EditText à chaque variable de chaîne différente? Si un organisme pouvait aider avec un exemple de code, ce serait bien.

36
Mohammad Usman

À chaque itération, vous réécrivez la variable ed, donc lorsque la boucle est terminée ed ne pointe que vers la dernière instance EditText que vous avez créée.

Vous devez stocker toutes les références à tous les EditTexts:

EditText ed;
List<EditText> allEds = new ArrayList<EditText>();

for (int i = 0; i < count; i++) {   

    ed = new EditText(Activity2.this);
    allEds.add(ed);
    ed.setBackgroundResource(R.color.blackOpacity);
    ed.setId(id);   
    ed.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    linear.addView(ed);
}

Maintenant, la liste allEds contient des références à tous les EditTexts, vous pouvez donc l'itérer et obtenir toutes les données.

Mise à jour:

Tel que demandé:

String[] strings = new String[](allEds.size());

for(int i=0; i < allEds.size(); i++){
    string[i] = allEds.get(i).getText().toString();
}
54
Peter Knego

Vous pouvez également faire cela en prenant un tableau de EditText. Vous devez stocker toutes les références à tous les EditTexts:

EditText ed[] = new EditText[count];    
for (int i = 0; i < count; i++) {   

    ed[i] = new EditText(Activity2.this);

    ed[i].setBackgroundResource(R.color.blackOpacity);
    ed[i].setId(id);   
    ed[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));
    linear.addView(ed[i]);
}

et vous pouvez utiliser la boucle for pour obtenir la valeur de EditText.

 for(int i = 0; i < ed.length; i++){

       Log.d("Value ","Val " + ed[i].getText());
  }
4
Sujit

J'ai une boucle for générant des TextViews dynamiques dans TableRows à partir d'une chaîne JSON. Voici ce que j'ai fait:

// Generate Dynamic tablerows and set a unique id
//m_jArry is a JSON Array

for(int i = 0; i < m_jArry.length(); i++)
{
    jo_inside = m_jArry.getJSONObject(i);
    TableRow row = new TableRow(getApplicationContext())
    row.setId(jo_inside.getInt("id"));
    ...        
    findViewById(row.getId())
    ...
}

J'utilise findViewById (row.getId ()) pour définir les données de texte TextView dynamiques sur les champs EditText dans mon application. Pour ceux d'entre vous qui ne comprennent pas JSON, il existe plusieurs bons tutoriels (je suis sûr qu'il y a d'excellentes explications ici sur Stack Overflow) pour la plate-forme Android Android. Je suis toujours un Android newbie, mais j'espère que cela sera utile à certains d'entre vous.

1
Artorias2718

c'est parce que EditText.gettext () renvoie Editable, donc toString ne fonctionnera pas. essayez String.valueOf (edittext.gettext).

si vous êtes sûr que vous obtenez le bon EditText mais prob. est de savoir comment 2 passer son test au code den chaîne est

    EditText t = new EditText(this);
    t.setText("test");// obviously in ur case it will be intered by user
    String s = String.valueOf(t.getText());
    System.out.println(s);

sinon utilisez setTeg (Edittext) n obtenez editText par getTag lors du clic sur le bouton.

            String[] strings = new String[allEds.size()];
            String[] strings1 = new String[allEdn.size()];

            for(int i=0; i < allEds.size(); i++){
                strings[i] = allEds.get(i).getText().toString();
                strings1[i] = allEdn.get(i).getText().toString();
                System.out.println("data in edittext name is  " +strings[i]);
                System.out.println("data in edittext number is " +strings1[i]);
            }

pour plusieurs edittext

0
rohit