Nhận tất cả các chế độ xem con bên trong linearLayout cùng một lúc


140

Tôi có một LinearLayout, trong đó có một vài đứa trẻ TextViews. Làm cách nào tôi có thể có được lượt xem con của linerLayout đó bằng vòng lặp?

Câu trả lời:


282

Sử dụng getChildCount()getChildAt(int index).

Thí dụ:

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

Xin chào Yashwanth Kumar, tôi có thể nhận được tất cả các TextView trong Linearlayout đó không?
Hai nguyen

15
@ hai-nguyen: Bạn có thể sử dụng if (v instanceof TextView) {...} cho điều đó.
Anoop

3
Điều gì sẽ xảy ra nếu một trong những đứa trẻ là Viewgroup và chúng tôi cũng muốn có được tất cả những đứa trẻ đó?
Hendra Anggrian

Làm thế nào tôi có thể nhận được tổng số không buttonsđược thêm vào trong bố cục tuyến tính và chia nó cho 2 ? Mục đích của tôi là hiển thị 2 hàng nút bằng cách sử dụng bố cục tuyến tính .
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.

Ở đây tôi chỉ lặp lại EdiTexts, nếu bạn muốn tất cả các Chế độ xem, bạn có thể thay thế Chỉnh sửa bằng Chế độ xem.

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);
        }
    }
}

Chỉ cần làm rõ, thực hiện đệ quy là vì getChildAtchỉ trả về những đứa trẻ trực tiếp
YoussefDir

4

dùng cái này

    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

Sẽ dễ dàng hơn với Kotlin khi sử dụng vòng lặp for-in:

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

Dưới đây llidcác LinearLayoutquy định tại layout XML.


1

Nhận tất cả các chế độ xem từ bất kỳ loại bố cục nào

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;
}

Nhận tất cả TextView từ bất kỳ loại bố cục nào

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

Nhận tất cả các chế độ xem của chế độ xem cộng với con của nó theo cách đệ quy trong 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)
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.