LinearLayout के अंदर एक बार में सभी बच्चे के विचार प्राप्त करें


140

मेरे पास एक LinearLayoutबच्चा है, जिसमें कई बच्चे हैं TextViews। मैं एक पाश का उपयोग करके उस लाइनरलेआउट के बच्चे के विचार कैसे प्राप्त कर सकता हूं?

जवाबों:


282

का उपयोग करें getChildCount()और getChildAt(int index)

उदाहरण:

LinearLayout ll = 
final int childCount = ll.getChildCount();
for (int i = 0; i < childCount; i++) {
      View v = ll.getChildAt(i);
      // Do something with v.
      // …
}

हाय यशवंत कुमार, क्या मुझे उस Linearlayout में सभी TextViews मिल सकते हैं?
हाई गुयेन

15
@ हाई-गुयेन: आप इसका उपयोग कर सकते हैं (v Instof TextView) {...} इसके लिए।
अनूप

3
क्या होगा अगर बच्चे में से एक व्यूग्रुप है और हम उन सभी चिल्ड को भी प्राप्त करना चाहते हैं?
हेंड्र एंग्रीयन जूल

मैं buttonsरैखिक लेआउट में कुल संख्या को कैसे प्राप्त कर सकता हूं और इसे 2 से विभाजित कर सकता हूं ? मेरा उद्देश्य रैखिक लेआउट का उपयोग करके बटन की 2 पंक्तियों को दिखाना है ।
जय राठौड़ RJ

39
((ViewGroup) findViewById(android.R.id.content));// you can use this in an Activity to get your layout root view, then pass it to findAllEdittexts() method below.

यहाँ मैं केवल EdiTexts को पुन: प्रसारित कर रहा हूँ, यदि आप सभी दृश्य चाहते हैं तो आप EditText को View से बदल सकते हैं।

SparseArray<EditText> array = new SparseArray<EditText>();

private void findAllEdittexts(ViewGroup viewGroup) {

    int count = viewGroup.getChildCount();
    for (int i = 0; i < count; i++) {
        View view = viewGroup.getChildAt(i);
        if (view instanceof ViewGroup)
            findAllEdittexts((ViewGroup) view);
        else if (view instanceof EditText) {
            EditText edittext = (EditText) view;
            array.put(editText.getId(), editText);
        }
    }
}

बस स्पष्ट करने के लिए, यह रिकर्सिवली कर रही है क्योंकि getChildAtरिटर्न केवल प्रत्यक्ष बच्चों
YoussefDir

4

इसे इस्तेमाल करो

    final int childCount = mainL.getChildCount();
    for (int i = 0; i < childCount; i++) {
          View element = mainL.getChildAt(i);

        // EditText
        if (element instanceof EditText) {
            EditText editText = (EditText)element;
            System.out.println("ELEMENTS EditText getId=>"+editText.getId()+ " getTag=>"+element.getTag()+
            " getText=>"+editText.getText());
        }

        // CheckBox
        if (element instanceof CheckBox) {
            CheckBox checkBox = (CheckBox)element;
            System.out.println("ELEMENTS CheckBox getId=>"+checkBox.getId()+ " getTag=>"+checkBox.getTag()+
            " getText=>"+checkBox.getText()+" isChecked=>"+checkBox.isChecked());
        }

        // DatePicker
        if (element instanceof DatePicker) {
            DatePicker datePicker = (DatePicker)element;
            System.out.println("ELEMENTS DatePicker getId=>"+datePicker.getId()+ " getTag=>"+datePicker.getTag()+
            " getDayOfMonth=>"+datePicker.getDayOfMonth());
        }

        // Spinner
        if (element instanceof Spinner) {
            Spinner spinner = (Spinner)element;
            System.out.println("ELEMENTS Spinner getId=>"+spinner.getId()+ " getTag=>"+spinner.getTag()+
            " getSelectedItemId=>"+spinner.getSelectedItemId()+
            " getSelectedItemPosition=>"+spinner.getSelectedItemPosition()+
            " getTag(key)=>"+spinner.getTag(spinner.getSelectedItemPosition()));
        }

    }

3

कोटलिन के लिए इन-लूप का उपयोग करना आसान है:

for (childView in ll.children) {
     //childView is a child of ll         
}

यहाँ llहै idके LinearLayoutलेआउट एक्सएमएल में परिभाषित किया।


1

किसी भी प्रकार के लेआउट से सभी दृश्य प्राप्त करें

public List<View> getAllViews(ViewGroup layout){
        List<View> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            views.add(layout.getChildAt(i));
        }
        return views;
}

सभी TextView को किसी भी प्रकार के लेआउट से प्राप्त करें

public List<TextView> getAllTextViews(ViewGroup layout){
        List<TextView> views = new ArrayList<>();
        for(int i =0; i< layout.getChildCount(); i++){
            View v =layout.getChildAt(i);
            if(v instanceof TextView){
                views.add((TextView)v);
            }
        }
        return views;
}

-1

कोटलिन में अपने बच्चों को पुनरावर्ती रूप से देखने के सभी दृश्य प्राप्त करें:

private fun View.getAllViews(): List<View> {
    if (this !is ViewGroup || childCount == 0) return listOf(this)

    return children
            .toList()
            .flatMap { it.getAllViews() }
            .plus(this as View)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.