2012-03-29 12 views
7

UIウィジェット用のタグを設定しました。特定のタグを持つViewのリストを取得したいと思います。 View.findViewWithTag("test_tag")を使用すると、タグをサポートするすべてのビューではなく1つのビューしか返されません。特定のタグ(属性)を持つビューのリストを見つける方法

助けてください。

+0

私は同様の質問があります。何をすべきか教えてくれませんか? http://stackoverflow.com/questions/17061833/androidone-button-id-for-many-buttons-on-expandable-list-children – user2468835

+0

参照:http://android-wtf.com/2013/06/どのように簡単にトラバース - 任意のビュー階層の - アンドロイド/ – Jamol

答えて

13

メソッドのシグニチャー自体が単一のビューを返すことを通知するので、このメソッドからのビューの配列は期待できません。

public final View findViewWithTag (Object tag) 

しかし、あなたが何もしてViewGroupとして、あなたのレイアウトを取得し、そのタグのルックアップを実行して、目的のビューを見つけるために、すべての子ビューを反復処理することです。たとえば:

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

私はそのメソッドがただビューを返します知っている。私はすべての意見を得るための簡単な方法を探しています。私はViewGroupを介してiteratingは最適化されたソリューションではないと思う。 – Behnam

+0

最適化されたソリューションではないことをどのように知っていますか? – waqaslam

+0

私は正確にはわかりません、最適化は相対的なものなので、より良い解決策が見つからなければ最適化することができます。 私はこの方法を知っていましたが、私は何らかの理由でそれを使用したくありません。しかし、最終的には良い解決策が見つからなければ、私はあなたの答えを受け入れるでしょう。 – 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){} 
    } 

が、これは誰かに役立ちます願っています!

関連する問題