Tambahkan & hapus tampilan dari Tata Letak

94

Bagaimana cara menambahkan & menghapus tampilan dari tata letak?

chiranjib.dll
sumber
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);
Nathan Schwermann
sumber
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);
Sameer Segal
sumber
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);
Tofeeq Ahmad
sumber
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
Abel Terefe
sumber
4
removeAllViews () adalah apa yang saya cari!
Alan
6

Untuk mengubah visibilitas:

predictbtn.setVisibility(View.INVISIBLE);

Untuk menghapus:

predictbtn.setVisibility(View.GONE);
Ameen Maheen
sumber
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));
Kai Wang
sumber
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)
Rasoul Miri
sumber
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 ...

Zala Janaksinh
sumber
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);

Sanjay Goswami
sumber
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)
}
Gibolt
sumber