Tambahkan & hapus tampilan dari Tata Letak


94

Bagaimana cara menambahkan & menghapus tampilan dari tata letak?


tata letak seperti apa? bisakah Anda menempelkan bagian kode yang sedang Anda kerjakan?
Cristian

3
Bagaimana ini dipersiapkan dengan baik?
Cornelius

Jawaban:


219

Saya telah melakukannya seperti ini:

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

45
Dalam SDK yang lebih baru (ViewGroup):)
Ron

@schwiz bagaimana kita mengatur ulang id tampilan dalam kasus ini Masalah saya adalah bahkan setelah aktivitas saya selesai setiap kali tampilan berikutnya ditambahkan, id tampilan bertambah. Saya ingin id tampilan menjadi default ke 1 ketika saya kembali ke aktivitas ini lagi .
AndroidNewBee

Terima kasih Lot untuk memberikan jawaban ini
hem

ViewGroup memperluas View mengimplementasikan ViewParent, ViewManager. lebih bagus untuk menyebutnya dengan casting ke (ViewGroup)
Mercury

24

Gunakan ViewStub dan tentukan tata letak tampilan yang ingin Anda alihkan. Untuk melihat:

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

Menghilang:

mViewStub.setVisibility(View.GONE);

40
Menyembunyikan tidak sama dengan melepas.
Darkwater

Jika Anda ingin menyembunyikan / memperlihatkan Anda dapat menggunakan .setVisibility (View.INVISIBLE) dan .setVisibility (View.VISIBLE). Saat tampilan tidak terlihat, pengguna tidak dapat berinteraksi dengannya.
dennisschagt

Katakanlah saya memiliki textView dengan onClickListener yang terpasang padanya. Jika saya membuatnya menghilang dan kemudian saya ketuk, apakah acara masih akan menyala?
ahitt6345

22

Ini cara terbaik

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

Jika Anda memiliki tata letak xml maka tidak perlu menambahkan panggilan dinamis.just saja

lp.removeViewAt(0);

Apa perbedaan dalam hal kinerja? Maksud saya perbedaan kinerja menambahkannya secara dinamis atau menempatkannya ke dalam file tata letak xml statis dan membiarkannya meningkat?
stdout

19

Untuk menambahkan tampilan ke layout, Anda dapat menggunakan addViewmetode ViewGroupkelas. Sebagai contoh,

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

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

Ada juga sejumlah metode penghapusan. Periksa dokumentasi ViewGroup . Salah satu cara sederhana untuk menghapus tampilan dari tata letak bisa seperti,

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

4
removeAllViews () adalah apa yang saya cari!
Alan

6

Untuk mengubah visibilitas:

predictbtn.setVisibility(View.INVISIBLE);

Untuk menghapus:

predictbtn.setVisibility(View.GONE);

Itu memperbaiki masalah saya, lebih dari setiap jawaban lainnya. Berguna jika seperti saya, latar belakang Anda atau beberapa parameter mencegah tampilan menghilang sama sekali.
Virthuss

1
itu karena View.GONE tidak menghapus tampilan untuk tata letak, hanya membuatnya tidak terlihat, dan tidak mengambil ruang apa pun untuk tujuan tata letak.
Victor

6

Jawaban luar biasa dari Sameer dan Abel Terefe. Namun, saat Anda menghapus tampilan, dalam opsi saya, Anda ingin menghapus tampilan dengan id tertentu. Inilah cara Anda melakukannya.

1, berikan tampilan id saat Anda membuatnya:

_textView.setId(index);

2, hapus tampilan dengan id:

removeView(findViewById(index));

1

Anda bisa menggunakan addView atau removeView

Jawa:

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

kotlin:

// 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

hai jika Anda baru di android gunakan cara ini Terapkan tampilan Anda untuk membuatnya hilang Hilang adalah salah satu cara, jika tidak, dapatkan tampilan induk, dan hapus anak dari sana ..... lain dapatkan tata letak induk dan gunakan ini metode menghapus semua anak parentView.remove (anak)

Saya akan menyarankan menggunakan pendekatan GONE ...


1
GONE akan secara efektif menyembunyikan tampilan tetapi tidak akan menghapusnya dari tata letak
Sababado

1
Gunakan sederhana parentView.remove (removeViewName);
Zala Janaksinh

Anda benar tentang itu, tetapi saya mencoba mengisyaratkan bahwa Anda tidak menjawab pertanyaan dengan memberikan solusi "GONE".
Sababado

0

Saya menghapus tampilan menggunakan Metode mulai dan hitung, saya telah menambahkan 3 tampilan dalam Tata Letak linier.

view.removeViews (0, 3);


0

Solusi Ekstensi Kotlin yang Dapat Digunakan Kembali

Sederhanakan penghapusan

Tambahkan ekstensi ini:

myView.removeSelf()

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

Sederhanakan penambahan

Berikut beberapa opsinya:

// 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)
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.