मैं इस उत्तर को केवल एक विकल्प के रूप में प्रदान करने जा रहा हूं @ IHeartAndroid के पुनरावर्ती एल्गोरिदम को सभी बच्चों View
को एक दृश्य पदानुक्रम में खोजने के लिए । ध्यान दें कि इस लेखन के समय, पुनरावर्ती समाधान में त्रुटिपूर्ण है कि इसके परिणाम में डुप्लिकेट शामिल होंगे।
उन लोगों के लिए जिन्हें अपने सिर को पुनरावृत्ति के चारों ओर लपेटने में परेशानी होती है, यहां एक गैर-पुनरावर्ती विकल्प है। आपको यह महसूस करने के लिए बोनस अंक मिलते हैं कि यह पुनरावर्ती समाधान के गहराई-पहले दृष्टिकोण के लिए एक चौड़ाई-पहला खोज विकल्प भी है ।
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;
}
त्वरित परीक्षणों की एक जोड़ी (औपचारिक कुछ भी नहीं) का सुझाव है कि यह विकल्प भी तेज है, हालांकि नए की संख्या के साथ ऐसा करने की सबसे अधिक संभावना है ArrayList
उदाहरणों की जो अन्य उत्तर बनाता है। इसके अलावा, परिणाम कैसे ऊर्ध्वाधर / क्षैतिज दृश्य पदानुक्रम के आधार पर भिन्न हो सकते हैं।
इससे पार से पोस्ट किया गया: Android | एक ViewGroup के सभी बच्चों के तत्व प्राप्त करें