Предполагая, что под "всеми представлениями в вашей деятельности" вы подразумеваете каждое представление в иерархии, в Android нет такого Iterator
или чего-либо такого, что позволяло бы вам выполнять итерации по всем представлениям.
ViewGroup
s имеют getChildCount
и getChildAt
методы, но они о прямых потомках ViewGroup
. Итак, вам нужно будет посетить каждого ребенка и проверить, является ли он ViewGroup
, и так далее. Короче говоря, я хотел, чтобы такая функция находила все представления, которые соответствуют определенному тегу (findViewWithTag возвращает только первое). Вот класс, который может повторять все представления:
public class LayoutTraverser {
private final Processor processor;
public interface Processor {
void process(View view);
}
private LayoutTraverser(Processor processor) {
this.processor = processor;
}
public static LayoutTraverser build(Processor processor) {
return new LayoutTraverser(processor);
}
public View traverse(ViewGroup root) {
final int childCount = root.getChildCount();
for (int i = 0; i < childCount; ++i) {
final View child = root.getChildAt(i);
if (child instanceof ViewGroup) {
traverse((ViewGroup) child);
}
}
return null;
}
}
Используйте это так:
LayoutTraverser.build(new LayoutTraverser.Processor() {
@Override
public void process(View view) {
// do stuff with the view
}
}).traverse(viewGroup);