2012-03-29 8 views
7

Configuro la etiqueta para widgets UI y quiero recuperar una lista de vista que tiene una etiqueta específica. Usando View.findViewWithTag("test_tag") solo devuelve una vista Ver no todas las etiquetas de soporte.Cómo encontrar la lista de vistas que tienen una etiqueta específica (atributo)

Cualquier ayuda apreciada.

+0

waqas tengo una pregunta similar. ¿Puedes decirme qué hacer? http://stackoverflow.com/questions/17061833/androidone-button-id-for-many-buttons-on-expandable-list-children – user2468835

+0

Ver: http://android-wtf.com/2013/06/ how-to-easily-travelling-any-view-hierarchy-in-android/ – Jamol

Respuesta

13

No debe esperar una variedad de vistas desde este método, ya que la firma del método en sí dice que devolverá una sola vista.

public final View findViewWithTag (Object tag) 

Sin embargo, lo que puede hacer es conseguir que su diseño como ViewGroup y luego iterar a través de todos los puntos de vista del niño para averiguar su vista deseada haciendo una consulta en su etiqueta. Por ejemplo:

/** 
* Get all the views which matches the given Tag recursively 
* @param root parent view. for e.g. Layouts 
* @param tag tag to look for 
* @return List of views 
*/ 
public static List<View> findViewWithTagRecursively(ViewGroup root, Object tag){ 
    List<View> allViews = new ArrayList<View>(); 

    final int childCount = root.getChildCount(); 
    for(int i=0; i<childCount; i++){ 
     final View childView = root.getChildAt(i); 

     if(childView instanceof ViewGroup){ 
      allViews.addAll(findViewWithTagRecursively((ViewGroup)childView, tag)); 
     } 
     else{ 
      final Object tagView = childView.getTag(); 
      if(tagView != null && tagView.equals(tag)) 
       allViews.add(childView); 
     } 
    } 

    return allViews; 
} 
+0

Sé que el método devuelve solo una vista. Estoy buscando una forma simple de obtener todas las vistas. Creo que iterar a través de un ViewGroup no es una solución optimizada. – Behnam

+0

¿cómo sabes que no es una solución optimizada? – waqaslam

+0

No sé exactamente, optimizar es algo relativo, por lo que si no se encuentra una solución mejor, se puede optimizar. Lo sabía de esta manera, pero no quiero usarlo por alguna razón. pero finalmente, si no se encuentra una solución mejor, aceptaré tu respuesta. – Behnam

0
int tags = 6; 
    for (int index = 0; index < tags; index++) { 
     try{ 
      TextView txtView = (TextView)getView().getRootView().findViewWithTag("txtTag-"+index); 
      txtView.setText(" TWitter/ @MOIALRESHOUDI "); 
     } catch (Exception e){} 
    } 

Esperamos que esto ayude a alguien!

Cuestiones relacionadas