我为UI小部件设置了标签,我想要检索具有特定标签的View列表。使用View.findViewWithTag("test_tag")
只返回一个View not not all支持标记的视图。
任何帮助表示感谢。
答案 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++;
}
}