2010-11-16 6 views
5

Comencé mi propia aplicación de Android hace unos días ya que necesitaba una aplicación móvil para almacenar una gran cantidad de datos que recopilé en el hospital.Loop a través de todos los "widgets"/elementos en una actividad

Soy bastante nuevo en el entorno de Java y Android, aunque parece fácil de entender y muy similar a C++.

De todos modos, mi aplicación tiene un montón de botones de radio "EditarTexto" y y mi pregunta es:

Como puedo iterar a través de todos los widgets (EditTexts y botones de radio)?

En .NET podría hacer un bucle "para cada elemento en contenedor" pero parece que no puedo encontrar la forma de hacerlo en Java/entorno Android.

Nota: no sé cuántos existen "widgets" en la actividad, ya que algunos son creados dinamicaly, otros están codificados y algunos otros muestran si algunas preferencias del usuario se establecen

Cualquier ayuda o sugerencia serían apreciado.

Respuesta

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

Tenga en cuenta que esto devolverá Vista-s, que tendrá que comprobar en tiempo de ejecución exactamente qué tipo de vista que está mirando la

+0

Este consejo parece apuntar en la dirección correcta. – Tivie

+2

Interesante. Pero el punto de partida fue una actividad. Así que a su demo le falta el paso de actividad a rootView ;-) - Probablemente pueda resolverlo yo mismo, pero hubiera sido agradable. – Martin

1

Funciona.

En cuanto a la vista tipo (es decir Spinner, radioButton, EditarTexto, etc) podemos etiquetar cada tipo queremos analizar en el archivo del formato XML y luego añadir un condicional, es decir:

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 

     } 
    } 

el caso (Widget_Tag! = Null) {es para evitar NullPointReferences. También puede hacerlo con un Try/Catch.

+0

Como dije a las aplicaciones: de dónde viene 'rootView'. – Martin

1

Puede probar este código:

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); 
Cuestiones relacionadas