Layout'a görünüm ekle ve sil


94

Bir düzene nasıl görünüm ekleyip silebilirim?


ne tür bir düzen? Lütfen üzerinde çalıştığınız kodun bir kısmını yapıştırır mısınız?
Cristian

3
Bu nasıl iyi hazırlanmış?
Cornelius

Yanıtlar:


223

Ben de öyle yaptım:

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

46
Yeni SDK'larda (ViewGroup):)
Ron

@schwiz bu durumda görünüm kimliklerini nasıl sıfırlayabiliriz. benim sorunum, bir sonraki görünüm eklendiğinde görünüm kimliği artırıldığında etkinliğim bittikten sonra bile. bu etkinliğe geri döndüğümde görünüm kimliğinin varsayılan olarak 1 olmasını istiyorum. .
AndroidNewBee

Bu cevabı verdiğiniz için çok teşekkürler
hem

ViewGroup, View uygulamalarını genişletir ViewParent, ViewManager. (ViewGroup) 'a yayınlama ile çağırmak daha güzel
Mercury

24

ViewStub'ı kullanın ve geçiş yapmak istediğiniz görünümün düzenini belirtin. Görüntülemek için:

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

Kaybolmak:

mViewStub.setVisibility(View.GONE);

41
Gizlemek, kaldırmakla aynı şey değildir.
Darkwater

Gizlemek / göstermek istiyorsanız .setVisibility (View.INVISIBLE) ve .setVisibility (View.VISIBLE) kullanabilirsiniz. Görünüm görünmez olduğunda, kullanıcı onunla etkileşim kuramaz.
dennisschagt

Diyelim ki ona bir onClickListener eklenmiş bir textView var. Kaybolmasını sağlarsam ve üzerine dokunursam, olay yine de ateşlenir mi?
ahitt6345

22

Bu en iyi yol

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 düzeniniz varsa dinamik olarak eklemenize gerek yoktur. Sadece arayın

lp.removeViewAt(0);

Performans açısından fark ne olacak? Demek istediğim, onları dinamik olarak eklemenin veya statik bir xml düzen dosyasına koymanın ve şişirilmesine izin vermenin performans farkı?
stdout

19

Bir düzene görünüm eklemek addViewiçin ViewGroupsınıfın yöntemini kullanabilirsiniz . Örneğin,

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

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

Ayrıca bir dizi kaldırma yöntemi vardır. ViewGroup belgelerine bakın . Bir düzenden görünümü kaldırmanın basit bir yolu şunun gibi olabilir:

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

4
removeAllViews () aradığım şey!
Alan

6

Görünürlüğü değiştirmek için:

predictbtn.setVisibility(View.INVISIBLE);

Kaldırmak için:

predictbtn.setVisibility(View.GONE);

Sorunumu diğer yanıtlardan daha fazla çözdü. Benim gibi, arka planınız veya bazı parametreler görünümün tamamen kaybolmasını engelliyorsa kullanışlıdır.
Virthuss

1
Bunun nedeni, View.GONE'nin düzen için görünümü kaldırmaması, sadece görünmez hale getirmesidir ve yerleşim amacıyla herhangi bir yer kaplamamasıdır.
Victor

6

Sameer ve Abel Terefe'den büyük cevaplayıcı. Ancak, bir görünümü kaldırdığınızda, benim seçeneğimde, belirli kimliğe sahip bir görünümü kaldırmak istiyorsunuz. İşte bunu nasıl yaparsınız.

1, görünümü oluştururken görünüme bir kimlik verin:

_textView.setId(index);

2, şu kimliğe sahip görünümü kaldırın:

removeView(findViewById(index));

1

addView veya removeView kullanabilirsiniz

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

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

merhaba, android'de yeniyseniz bu şekilde kullanın Görünümü uygulayın GİTTİLDİ bir yoldur, aksi takdirde ebeveyn görünümünü elde edin ve çocuğu oradan kaldırın ..... aksi takdirde ebeveyn düzenini alın ve bunu kullanın yöntem ve tüm alt parentView.remove (alt) kaldırmak

GONE yaklaşımını kullanmanızı öneririm ...


1
GONE görünümü etkili bir şekilde gizleyecek, ancak onu düzenden çıkarmayacak
Sababado

1
ParentView.remove (removeViewName) 'i basit bir şekilde kullanın;
Zala Janaksinh

Bu konuda haklısın, ama soruyu "GİTTİ" çözümünü sunarak cevaplamadığını ima etmeye çalışıyordum.
Sababado

0

Başla ve say Yöntemini kullanarak görünümü kaldırıyorum, doğrusal Düzende 3 görünüm ekledim.

view.removeViews (0, 3);


0

Kotlin Yeniden Kullanılabilir Uzantı Çözümü

Kaldırmayı basitleştirin

Bu uzantıyı ekleyin:

myView.removeSelf()

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

Eklemeyi basitleştirin

İşte birkaç seçenek:

// 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)
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.