Saya hanya akan memberikan jawaban ini sebagai alternatif algoritma rekursif @ IHeartAndroid untuk menemukan semua anak View
dalam hierarki tampilan. Perhatikan bahwa pada saat penulisan ini, solusi rekursif cacat karena akan berisi duplikat dalam hasilnya.
Bagi mereka yang memiliki kesulitan membungkus kepala mereka di sekitar rekursi, inilah alternatif non-rekursif. Anda mendapatkan poin bonus karena menyadari ini juga merupakan alternatif pencarian pertama untuk pendekatan mendalam-pertama dari solusi rekursif.
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;
}
Beberapa tes cepat (tidak formal) menunjukkan alternatif ini juga lebih cepat, meskipun itu kemungkinan besar berkaitan dengan jumlah ArrayList
contoh baru yang diciptakan oleh jawaban lain. Juga, hasil dapat bervariasi berdasarkan seberapa vertikal / horizontal hierarki tampilan.
Diposting silang dari: Android | Dapatkan semua elemen anak-anak dari ViewGroup