2012-03-29 6 views
7

ho impostato tag per i widget UI e voglio recuperare un elenco di vista che ha un tag specifico. Utilizzando View.findViewWithTag("test_tag") basta restituire una vista, non tutti visualizzano tale tag di supporto.Come trovare l'elenco dei View (s) che ha un tag specifico (attributo)

Qualsiasi aiuto apprezzato.

+0

waqas Ho una domanda simile. puoi dirmi cosa fare? http://stackoverflow.com/questions/17061833/androidone-button-id-for-many-buttons-on-expandable-list-children – user2468835

+0

Vedi: http://android-wtf.com/2013/06/ how-to-easy-traverse-any-view-hierarchy-in-android/ – Jamol

risposta

13

Non ci si dovrebbe aspettare un array di viste da questo metodo, poiché la firma del metodo indica che restituirà una vista singola.

public final View findViewWithTag (Object tag) 

Tuttavia, ciò che si può fare è quello di ottenere il layout come ViewGroup e poi scorrere tutti i punti di vista del bambino per trovare la propria vista desiderata facendo un look-up sulla loro etichetta. Per esempio:

/** 
* 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

So che il metodo restituisce solo una vista. Sto cercando un modo semplice per ottenere tutti i punti di vista. Penso che iterare attraverso un ViewGroup non sia una soluzione ottimizzata. – Behnam

+0

come fai a sapere che non è una soluzione ottimizzata? – waqaslam

+0

Non so esattamente, l'ottimizzazione è relativa, quindi se non viene trovata una soluzione migliore, può essere ottimizzata. Sapevo in questo modo ma non voglio usarlo per qualche motivo. ma alla fine, se non trova una soluzione migliore, accetterò la tua risposta. – 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){} 
    } 

speranza che questo aiuta qualcuno!

Problemi correlati