การลบมุมมองเด็กทั้งหมดออกจากมุมมอง


111

ฉันจะลบมุมมองเด็กทั้งหมดออกจากวิดเจ็ตได้อย่างไร ตัวอย่างเช่นฉันมี GridView และฉันขยาย LinearLayouts อื่น ๆ แบบไดนามิกเข้าไปในนั้น ต่อมาในแอปพลิเคชันของฉันฉันต้องการเริ่มต้นใหม่ด้วย GridView นั้นและล้างมุมมองย่อยทั้งหมด ฉันจะทำอย่างไร TIA.

คำตอบ:


199
viewGroup.removeAllViews()

ใช้ได้กับทุก viewGroup ในกรณีของคุณคือ GridView

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


5
จริงๆแล้ว removeAllViews () จะแสดงข้อยกเว้นเมื่อเรียกบน GridView จากเอกสาร: "ไม่รองรับวิธีนี้และจะพ่น UnsupportedOperationException เมื่อเรียก"
Moritz

ข้อคิดเห็นนั้นนำไปใช้กับคลาสฐานนามธรรมที่มาจาก ViewGroup ViewGroup เองและคลาสที่สืบทอดมาทั้งหมดรองรับ removeAllViews
Dale Wilson

วิธีการรับViewGroup?
นิ่มนัดดาโกวธรรม

@NimmagaddaGowtham คลาส XxxLayout ส่วนใหญ่ (LinearLayout, RelativeLayout ฯลฯ ) เป็นคลาสย่อยของ ViewGroup หากคุณมีหนึ่งในนั้นแสดงว่าคุณมี ViewGroup แล้ว
GrandOpener

15

คุณสามารถลบมุมมองบางประเภทในViewGroup ได้ด้วยฟังก์ชันนี้:

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
โหวตลงเนื่องจาก OP ไม่ได้ถามถึงวิธีลบมุมมองย่อยประเภทต่างๆ OP ต้องการลบมุมมองย่อยทั้งหมด
protectedmember


0

ลองทำตามนี้

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