Bu cevabı sadece View
bir görünüm hiyerarşisinde tüm çocukları keşfetmek için @ IHeartAndroid'in özyinelemeli algoritması olarak sunacağım . Bu yazı yazılırken, özyinelemeli çözümün, sonuçta kopyalar içereceği için kusurlu olduğunu unutmayın.
Başlarını özyineleme etrafına sarmakta zorlananlar için, burada özyinelemesiz bir alternatif. Bunun , özyinelemeli çözümün derinlik-ilk yaklaşımına bir genişlik ilk arama alternatifi olduğunu fark ettiğiniz için bonus puanlar alırsınız .
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;
}
Birkaç hızlı test (resmi olmayan hiçbir şey), bu alternatifin de daha hızlı olduğunu düşündürmektedir, ancak bunun ArrayList
diğer cevabın yarattığı yeni örneklerin sayısıyla ilgili olması muhtemeldir . Ayrıca, sonuçlar görünüm hiyerarşisinin ne kadar dikey / yatay olduğuna bağlı olarak değişebilir.
Yayınlandığı tarih: Android | Bir ViewGroup öğesinin tüm alt öğelerini alma