Je vais juste vous fournir cette réponse comme une alternative @IHeartAndroid de l'algorithme récursif pour découvrir tous les enfants - View
s en vue de la hiérarchie. Notez qu'au moment d'écrire ces lignes, la solution récursive est erronée en ce qu'elle contient des doublons dans son résultat.
Pour ceux qui ont des problèmes d'emballage de leur tête autour de la récursivité, voici un non-récursive alternative. Vous obtenez des points bonus pour la réalisation de ce est aussi une largeur tout d'abord la recherche d'alternative à la profondeur-première approche de la solution récursive.
private List<View> getAllChildrenBFS(View v) {
List<View> visited = new ArrayList<View>();
List<View> unvisited = new ArrayList<View>();
unvisited.add(v);
while (!unvisited.isEmpty()) {
View child = unvisited.remove(0);
visited.add(child);
if (!(child instanceof ViewGroup)) continue;
ViewGroup group = (ViewGroup) child;
final int childCount = group.getChildCount();
for (int i=0; i<childCount; i++) unvisited.add(group.getChildAt(i));
}
return visited;
}
Un couple de tests rapides (rien d'officiel) suggèrent que cette solution est également plus rapide, bien que cela a probablement à voir avec le nombre de nouveaux ArrayList
des cas la réponse à crée. Aussi, les résultats peuvent varier en fonction de la façon verticale ou à l'horizontale, le point de vue de la hiérarchie.
Cross-posté depuis: Android | Obtenir tous les éléments enfants d'un ViewGroup