如何查找具有特定标记(属性)的视图列表

时间:2012-03-29 07:04:04

标签: android android-layout

我为UI小部件设置了标签,我想要检索具有特定标签的View列表。使用View.findViewWithTag("test_tag")只返回一个View not not all支持标记的视图。

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:15)

你不应该期望这个方法有一组视图,因为方法签名本身告诉它会返回一个视图。

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;
}

答案 1 :(得分: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){}
    }

希望这有助于某人!

答案 2 :(得分:0)

在我的用例中非常简单。例如,layoyut 中有十二个具有相同标签的图像视图。 当 findViewWithTag("image") 调用时。它只会从布局中提供第一个索引单个图像视图。当您获得带有该标签的 imageview 时,解决方案很简单,只需将该 imageview 标签设置为空字符串。当 findViewWithTag("image") 调用时,下一次迭代。它只会为您提供下一个图像视图。

for(int inf = 0; inf < albumPageImagesInfoList.get(cardPosition); inf++){
            ImageView imageView = inflateView.findViewWithTag("image");
            if(imageView!=null){
                imageView.setId(uivid);
                imageView.setTag("");
                imgIndexId++;
            }
        }