2012-03-29 14 views
7

Ustawiam znacznik dla widgetów interfejsu użytkownika i chcę pobrać listę widoku, która ma określony znacznik. Używając View.findViewWithTag("test_tag") po prostu zwróć jeden widok Nie cały widok, który obsługuje tag.Jak znaleźć listę widoków, które mają określony znacznik (atrybut)

Każda pomoc doceniona.

+0

waqas Mam podobne pytanie. czy możesz mi powiedzieć, co mam robić? http://stackoverflow.com/questions/17061833/androidone-button-id-for-many-buttons-on-expandable-list-children – user2468835

+0

Zobacz: http://android-wtf.com/2013/06/ jak łatwo-przechodzić-jak-widoku-hierarchii-w-android/ – Jamol

Odpowiedz

13

Nie powinieneś spodziewać się widoku z tej metody, ponieważ sam podpis metody informuje, że zwróci pojedynczy widok.

public final View findViewWithTag (Object tag) 

Jednak to, co można zrobić, to dostać swój układ jako ViewGroup a następnie iterację wszystkich widoków podrzędnych, aby dowiedzieć się żądany widok wykonując przeglądowej na ich tag. Na przykład:

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

Wiem, że metoda zwraca tylko widok. Szukam prostego sposobu na uzyskanie wszystkich wyświetleń. Myślę, że iterowanie przez ViewGroup nie jest zoptymalizowanym rozwiązaniem. – Behnam

+0

Skąd wiadomo, że nie jest to zoptymalizowane rozwiązanie? – waqaslam

+0

Nie wiem dokładnie, zoptymalizowana jest rzecz względna, więc jeśli nie znajdziemy lepszego rozwiązania, można ją zoptymalizować. Znałem tę drogę, ale nie chcę jej używać z jakiegoś powodu. ale w końcu, jeśli nie znajdzie się lepszego rozwiązania, przyjmuję twoją odpowiedź. – 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){} 
    } 

nadzieję, że ktoś pomaga!

Powiązane problemy