Xóa tất cả các chế độ xem con khỏi chế độ xem


111

Làm cách nào để xóa tất cả các chế độ xem con khỏi tiện ích con? Ví dụ: tôi có một GridView và tôi tự động thổi phồng nhiều LinearLayout khác vào đó; sau đó trong ứng dụng của tôi, tôi đang tìm cách bắt đầu mới với GridView đó và xóa tất cả các Chế độ xem con của nó. Tôi sẽ làm điều này như thế nào? TIA.

Câu trả lời:


199
viewGroup.removeAllViews()

hoạt động cho bất kỳ nhóm xem nào. trong trường hợp của bạn, đó là GridView.

http://developer.android.com/reference/android/view/ViewGroup.html#removeAllViews ()


5
Trên thực tế removeAllViews () ném một ngoại lệ khi được gọi trên GridView. Từ Tài liệu: "Phương thức này không được hỗ trợ và ném Ngoại lệ không được hỗ trợ khi được gọi."
Moritz

Nhận xét đó áp dụng cho lớp cơ sở trừu tượng mà từ đó ViewGroup được dẫn xuất. Bản thân ViewGroup và tất cả các lớp dẫn xuất của nó hỗ trợ removeAllViews.
Dale Wilson,

Làm thế nào để nhận được ViewGroup?
Nimmagadda Gowtham

@NimmagaddaGowtham hầu hết các lớp XxxLayout (LinearLayout, RelativeLayout, v.v.) là các lớp con của ViewGroup. Nếu bạn có một trong những cái đó, bạn đã có một ViewGroup.
GrandOpener

14

Bạn chỉ có thể loại bỏ một số kiểu xem trong ViewGroup bằng chức năng này:

private void clearImageView(ViewGroup v) {
    boolean doBreak = false;
    while (!doBreak) {
        int childCount = v.getChildCount();
        int i;
        for(i=0; i<childCount; i++) {
            View currentChild = v.getChildAt(i);
            // Change ImageView with your desired type view
            if (currentChild instanceof ImageView) {
                v.removeView(currentChild);
                break;
            }
        }

        if (i == childCount) {
            doBreak = true;
        }
    }
}

1
Bị phản đối vì OP không hỏi làm thế nào để loại bỏ các loại chế độ xem trẻ em khác nhau. OP muốn xóa tất cả các chế độ xem con.
protectedmember

3

Thử cái này

RelativeLayout  relativeLayout = findViewById(R.id.realtive_layout_root);
    relativeLayout.removeAllViews();

Mã này đang làm việc cho tôi.


0

Thử cái này

void removeAllChildViews(ViewGroup viewGroup) {
    for (int i = 0; i < viewGroup.getChildCount(); i++) {
        View child = viewGroup.getChildAt(i);
        if (child instanceof ViewGroup) {
            if (child instanceof AdapterView) {
                viewGroup.removeView(child);
                return;
            }
            removeAllChildViews(((ViewGroup) child));
        } else {
            viewGroup.removeView(child);
        }
    }
}
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.