我知道这不是最佳做法,但是我有几种布局(一次只能看到一个) 所有人都使用相同的view_id。
是否有任何方法可以获取具有此ID的所有视图?
我可以迭代所有布局和layout.findViewById()
,但想询问是否存在类似于CSS findViewsById() views 而不是 view
Activity::findViewById()
仅返回第一个。
答案 0 :(得分:3)
不,没有类似的方法。如果存在“肮脏的骇客”,它将是不稳定的。 这里的“最佳实践”将是迭代布局,并将引用存储在数组中的这些视图上。
答案 1 :(得分:0)
您可以自己制作。在这种情况下,您必须改为使用setContentView(View)
。这样您的findViewsById()
就可以了,
public View[] findViewsById(int id) {
View[] views = new View[contentViews.length];
for(int i=0; i<contentViews.length; i++) {
views[i] = contentViews[i].findViewById(id);
}
return views;
}
您的活动应如下所示,
private View[] contentViews;
@Override
public void onCreate(Bundle si) {
super.onCreate(si);
populateContentViews();
setContentView(contentViews[x]);
...
}
答案 2 :(得分:0)
当然可以。 只需递归即可:
对于每个视图,请检查其ID,并为其子视图进行操作。
就是这样。
毕竟,这几乎是findViewById所做的。它像递归一样在视图层次结构中进行搜索,直到找到为止。