เพิ่มและลบมุมมองจากเค้าโครง


94

ฉันจะเพิ่มและลบมุมมองจากเค้าโครงได้อย่างไร


เค้าโครงแบบไหน? คุณช่วยวางโค้ดส่วนหนึ่งที่กำลังทำงานอยู่ได้ไหม
Cristian

3
เรื่องนี้เตรียมตัวอย่างไร?
Cornelius

คำตอบ:


223

ฉันทำแล้ว:

((ViewManager)entry.getParent()).removeView(entry);

46
ใน SDK ใหม่กว่า(ViewGroup):)
รอน

@schwiz เราจะรีเซ็ตรหัสมุมมองได้อย่างไรในกรณีนี้ปัญหาของฉันคือแม้หลังจากกิจกรรมของฉันเสร็จสิ้นเมื่อใดก็ตามที่มีการเพิ่มมุมมองถัดไปรหัสมุมมองจะเพิ่มขึ้นฉันต้องการให้ id มุมมองเป็นค่าเริ่มต้นเป็น 1 เมื่อฉันกลับไปที่กิจกรรมนี้อีกครั้ง .
AndroidNewBee

ขอบคุณมากสำหรับการให้คำตอบนี้
มิ้ม

ViewGroup ขยาย View ดำเนินการ ViewParent, ViewManager ดีกว่าที่จะเรียกมันด้วยการแคสต์ถึง (ViewGroup)
พุธ

24

ใช้ ViewStub และระบุเค้าโครงของมุมมองที่คุณต้องการสลับ ดู:

mViewStub.setVisibility(View.VISIBLE) or mViewStub.inflate();

หายไป:

mViewStub.setVisibility(View.GONE);

41
การซ่อนไม่เหมือนกับการลบ
Darkwater

หากคุณต้องการซ่อน / ยกเลิกการซ่อนคุณสามารถใช้. setVisibility (View.INVISIBLE) และ. setVisibility (View.VISIBLE) เมื่อมองไม่เห็นมุมมองผู้ใช้จะไม่สามารถโต้ตอบได้
dennisschagt

สมมติว่าฉันมี textView ที่แนบ onClickListener ถ้าฉันทำมันหายไปแล้วฉันแตะมันเหตุการณ์จะยังคงอยู่ไหม
ahitt6345

22

วิธีนี้เป็นวิธีที่ดีที่สุด

LinearLayout lp = new LinearLayout(this);
lp.addView(new Button(this));
lp.addView(new ImageButton(this));
// Now remove them 
lp.removeViewAt(0); // and so on

หากคุณมีเลย์เอาต์ xml ไม่จำเป็นต้องเพิ่มแบบไดนามิกเพียงแค่โทร

lp.removeViewAt(0);

อะไรคือความแตกต่างในแง่ของประสิทธิภาพ? ฉันหมายถึงประสิทธิภาพที่แตกต่างจากการเพิ่มแบบไดนามิกหรือใส่ลงในไฟล์เลย์เอาต์ xml แบบคงที่และปล่อยให้มันสูงเกินจริง?
stdout

19

ในการเพิ่มมุมมองให้กับเค้าโครงคุณสามารถใช้addViewวิธีการของViewGroupคลาส ตัวอย่างเช่น,

TextView view = new TextView(getActivity());
view.setText("Hello World");

ViewGroup Layout = (LinearLayout) getActivity().findViewById(R.id.my_layout);
layout.addView(view); 

นอกจากนี้ยังมีวิธีการลบอีกหลายวิธี ตรวจสอบเอกสารของViewGroup วิธีง่ายๆอย่างหนึ่งในการลบมุมมองออกจากเค้าโครงสามารถทำได้เช่น

layout.removeAllViews(); // then you will end up having a clean fresh layout

4
removeAllViews () คือสิ่งที่ฉันกำลังมองหา!
Alan

6

สำหรับการเปลี่ยนการมองเห็น:

predictbtn.setVisibility(View.INVISIBLE);

สำหรับการลบ:

predictbtn.setVisibility(View.GONE);

มันช่วยแก้ปัญหาของฉันได้มากกว่าทุกคำตอบ มีประโยชน์ถ้าชอบฉันพื้นหลังของคุณหรือพารามิเตอร์บางอย่างทำให้มุมมองหายไปทั้งหมด
Virthuss

1
เป็นเพราะ View.GONE ไม่ได้ลบมุมมองสำหรับเลย์เอาต์เพียงทำให้มองไม่เห็นและไม่ใช้พื้นที่ใด ๆ สำหรับวัตถุประสงค์ในการจัดวาง
วิกเตอร์

6

ผู้โจมตีที่ยอดเยี่ยมจาก Sameer และ Abel Terefe อย่างไรก็ตามเมื่อคุณลบมุมมองในตัวเลือกของฉันคุณต้องการลบมุมมองที่มีรหัสบางอย่าง นี่คือวิธีที่คุณทำ

1 ให้ดู id เมื่อคุณสร้าง:

_textView.setId(index);

2 ลบมุมมองด้วย id:

removeView(findViewById(index));

1

คุณสามารถใช้ addView หรือ removeView

java:

// Root Layout
LinearLayout linearLayout = new LinearLayout(context);
linearLayout.setGravity(Gravity.CENTER);
linearLayout.setOrientation(LinearLayout.VERTICAL);

// TextView
TextView textView = new TextView(context);
textView.setText("Sample");

// Add TextView in LinearLayout
linearLayout.addView(textView);

// Remove TextView from LinearLayout
linearLayout.removeView(textView);

ก๊อตลิน:

// Root Layout
val linearLayout = LinearLayout(context)
linearLayout.gravity = Gravity.CENTER
linearLayout.orientation = LinearLayout.VERTICAL

// TextView
val textView = TextView(context)
textView.text = "Sample"

// Add TextView in LinearLayout
linearLayout.addView(textView)

// Remove TextView from LinearLayout
linearLayout.removeView(textView)

0

สวัสดีถ้าคุณเป็นคนใหม่ใน Android ให้ใช้วิธีนี้ใช้มุมมองของคุณเพื่อให้หายไปเป็นวิธีหนึ่งอย่างอื่นรับมุมมองของผู้ปกครองและนำเด็กออกจากที่นั่น ..... อื่นรับเค้าโครงหลักและใช้สิ่งนี้ วิธีลบ parentView.remove ลูกทั้งหมด (ลูก)

ฉันขอแนะนำให้ใช้วิธี GONE ...


1
GONE จะซ่อนมุมมองอย่างมีประสิทธิภาพ แต่จะไม่ลบออกจากเค้าโครง
Sababado

1
ใช้ parentView.remove อย่างง่าย (removeViewName);
Zala Janaksinh

คุณพูดถูก แต่เราพยายามบอกใบ้ว่าคุณไม่ได้ตอบคำถามโดยให้วิธีแก้ปัญหา "GONE"
Sababado

0

ฉันกำลังลบมุมมองโดยใช้วิธีเริ่มต้นและนับฉันได้เพิ่มมุมมอง 3 มุมมองในเค้าโครงเชิงเส้น

view.removeViews (0, 3);


0

Kotlin Reusable Extension Solution

ลดความซับซ้อนในการกำจัด

เพิ่มส่วนขยายนี้:

myView.removeSelf()

fun View?.removeSelf() {
    this ?: return
    val parent = parent as? ViewGroup ?: return
    parent.removeView(this)
}

เพิ่มความง่าย

นี่คือตัวเลือกบางส่วน:

// Built-in
myViewGroup.addView(myView)

// Null-safe extension
fun ViewGroup?.addView(view: View?) {
    this ?: return
    view ?: return
    addView(view)
}

// Reverse addition
myView.addTo(myViewGroup)

fun View?.addTo(parent: ViewGroup?) {
    this ?: return
    parent ?: return
    parent.addView(this)
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.