2010-11-16 17 views
5

J'ai lancé ma propre application Android il y a quelques jours car j'avais besoin d'une application mobile pour stocker un tas de données que je collectionne à l'hôpital. Je suis assez nouveau à l'environnement de Java et d'androïde, bien qu'il semble facile à comprendre et très semblable à C++.Parcourez tous les «widgets»/éléments d'une activité

Quoi qu'il en soit, ma demande a un tas de « EditText » et des boutons radio et ma question est:

Comment puis-je itérer tous ces widgets (EditTexts et boutons radio)?

Dans .NET, vous pourriez faire une boucle "pour chaque élément dans le conteneur" mais je n'arrive pas à trouver un moyen de le faire dans l'environnement Java/android.

Note: Je ne sais pas combien de « widgets » existent dans l'activité, puisque certains sont créés dinamicaly, d'autres sont codés en dur et d'autres montrent si certaines préférences utilisateur sont définies

Toute aide ou soupçon seraient apprécié.

Répondre

4
for (int i = 0; i < rootView.getChildCount(); i++) 
    rootView.getChildAt(i) 

Notez que ce retour View-s, vous devrez vérifier lors de l'exécution exactement ce type de vue que vous recherchez actuellement à

+0

Cette astuce semble pointer dans la bonne direction. – Tivie

+2

Intéressant. Mais le point de départ était une activité. Donc votre démo manque l'étape de l'activité à rootView ;-) - Je peux probablement me débrouiller mais ça aurait été sympa. – Martin

1

Il fonctionne.

En ce qui concerne le type de vue (c.-à-Spinner, radioButton, EditText, etc.), nous pouvons marquer chaque type que nous voulons analyser dans le fichier XML de mise en page et ajoutez une condition, à savoir:

if (Widget_Tag != null){ 

     View Current_Widget = (View) rootView.getChildAt(i);   

     String Widget_Tag = (String) Current_Widget.getTag(); 

     if (Widget_Tag.equals("MyEdiText")) { 

     //do something 

     } 
    } 

if (Widget_Tag! = Null) {est d'empêcher NullPointReferences. Vous pouvez aussi le faire avec un Try/Catch.

+0

Comme je l'ai dit aux applications: d'où vient 'rootView'. – Martin

1

Vous pouvez essayer ce code:

LayoutInflater inflater = getLayoutInflater(); 
LinearLayout l = (LinearLayout) inflater.inflate(R.layout.main, null); 

ViewGroup Current_Widget = (ViewGroup)l.getRootView(); 

for (int i = 0; i < Current_Widget.getChildCount(); i++) 
    Current_Widget.getChildAt(i);