2012-03-29 37 views
7

Tôi đặt thẻ cho tiện ích con giao diện người dùng và tôi muốn truy xuất danh sách Chế độ xem có thẻ cụ thể. Sử dụng View.findViewWithTag("test_tag") chỉ cần trả lại một Chế độ xem không phải tất cả chế độ xem hỗ trợ thẻ.Cách tìm danh sách (các) Chế độ xem có Thẻ cụ thể (thuộc tính)

Bất kỳ trợ giúp nào được đánh giá cao.

+0

waqas tôi có một câu hỏi tương tự. bạn có thể cho tôi biết phải làm gì không? http://stackoverflow.com/questions/17061833/androidone-button-id-for-many-buttons-on-expandable-list-children – user2468835

+0

Xem: http://android-wtf.com/2013/06/ làm thế nào để dễ dàng-đi-qua-bất kỳ-view-hierarchy-in-android/ – Jamol

Trả lời

13

Bạn không nên mong đợi một loạt các khung nhìn từ phương thức này, vì chính chữ ký của phương thức cho biết rằng nó sẽ trả về một khung nhìn duy nhất.

public final View findViewWithTag (Object tag) 

Tuy nhiên, những gì bạn có thể làm là để có được bố trí của bạn như ViewGroup và sau đó lặp qua tất cả các quan điểm con để tìm hiểu xem mong muốn của bạn bằng cách thực hiện một cái nhìn lên trên thẻ của họ. Ví dụ:

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

Tôi biết rằng phương thức trả về chỉ là một View. Tôi đang tìm một cách đơn giản để có được tất cả các quan điểm. Tôi nghĩ việc lặp qua một ViewGroup không phải là giải pháp tối ưu. – Behnam

+0

Làm thế nào để bạn biết rằng nó không phải là một giải pháp tối ưu hóa? – waqaslam

+0

Tôi không biết chính xác, tối ưu hóa là điều tương đối, vì vậy nếu không tìm thấy giải pháp tốt hơn, nó có thể được tối ưu hóa. Tôi biết cách này nhưng tôi không muốn sử dụng nó vì lý do nào đó. nhưng cuối cùng nếu không có giải pháp tốt hơn tìm thấy tôi sẽ chấp nhận câu trả lời của bạn. – 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){} 
    } 

hy vọng điều này giúp một ai đó!

Các vấn đề liên quan