2011-06-15 5 views
2

Je suis en train de créer une méthode de "validation de formulaire", pour voir que tous les objets EditText ne sont pas vides.Récupérer tous les objets de vue, android

Je veux invoquer la même méthode pour chaque objet EditText (dans une boucle), comment puis-je les récupérer tous?

p.s. ils sont defind dans un fichier XML et non dans le fichier .java, si elle compte

Répondre

1

Vous pouvez vous promener tous les enfants et voir si elle est en instanceof EditText, mais je pense une meilleure approche serait d'avoir int[] des cartes d'identité et itérer sur cela et appeler findViewById() pour obtenir les instances individuelles EditText.

int[] editIds = new int[] { R.id.edit1, R.id.edit2, R.id.edit3 }; 

for (int id : editIds) { 
    MyEditText text = (MyEditText) findViewById(id); 
    text.validate(); 
} 
+0

ok, première approche: comment puis-je obtenir une liste de tous les enfants? et deuxième approche: vous dites que je devrais enregistrer tous les identifiants de ce tableau, qu'ils soient ou non des objets EditText? Merci! – yotamoo

+0

Réponse mise à jour avec un exemple de la deuxième approche. Si vous voulez aller avec la première approche, utilisez 'ViewGroup.getChildCount()' et 'ViewGroup.getChildAt (index)'. Vous devrez le faire de manière récursive. –

1

itérer tous simplement les enfants de votre ViewGroup

final int count = parent.getChildCount(); 
for(int i = 0; i < count ; i++){ 
    try{ 
     EditText et = (EditText)parent.getChildAt(i);//this causes exception if view is not EditText 

     //perform validation here 
    } 
    catch(Exception e){ 
    } 
} 
+0

Si parent.getChildAt (i) renvoie une vue qui est une instance de ViewGroup, vous devez également parcourir les enfants de cette vue. Aussi, au lieu de lancer et attraper l'exception, vous pouvez exécuter conditionnellement cette partie avec 'if (parent.getChildAt (i) instanceof EditText) {}' –

+0

nice catch :) (et bien sûr essayer);) – woodshy

Questions connexes