รับมุมมองลูกทั้งหมดภายใน LinearLayout ในครั้งเดียว


คำตอบ:


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.
      // …
}

สวัสดี Yashwanth Kumar ฉันจะได้รับ TextViews ทั้งหมดใน Linearlayout นั้นได้ไหม
ไห่เหงียน

15
@ hai-nguyen: คุณสามารถใช้ if (v instanceof TextView) {... } สำหรับสิ่งนั้น
Anoop

3
จะเป็นอย่างไรถ้าเด็กคนใดคนหนึ่งเป็น ViewGroup และเราต้องการรับเด็กเหล่านั้นด้วย?
Hendra Anggrian

ฉันจะไม่ได้รับจำนวนทั้งหมดของการbuttonsเพิ่มในรูปแบบเชิงเส้นแล้วหารด้วย2 ได้อย่างไร? จุดประสงค์ของฉันคือการแสดง 2 แถวของปุ่มโดยใช้รูปแบบเชิงเส้น
Jay Rathod 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

มันง่ายขึ้นเมื่อใช้ Kotlin ในการวนลูป:

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

นี่llคือidของLinearLayoutกำหนดไว้ในเค้าโครง XML


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

รับมุมมองทั้งหมดของมุมมองรวมถึงมุมมองลูก ๆ ใน Kotlin:

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)
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.