Dodaj i usuń widok z układu

94

Jak mogę dodać i usunąć widok z układu?

chiranjib
źródło
jaki rodzaj układu? czy możesz wkleić część kodu, nad którym pracujesz?
Cristian,
3
Jak to jest dobrze przygotowane?
Cornelius,

Odpowiedzi:

219

Zrobiłem to tak:

((ViewManager)entry.getParent()).removeView(entry);
Nathan Schwermann
źródło
45
W nowszych SDK jest (ViewGroup):)
Ron
@schwiz, jak możemy zresetować identyfikator widoku w tym przypadku Mój problem polega na tym, że nawet po zakończeniu mojej aktywności za każdym razem, gdy zostanie dodany następny widok, identyfikator widoku zostanie zwiększony. Chcę, aby identyfikator widoku był domyślnie ustawiony na 1, gdy wrócę do tej czynności .
AndroidNewBee
Dziękuję bardzo za udzielenie tej odpowiedzi
hem
ViewGroup rozszerza View implementuje ViewParent, ViewManager. ładniej to nazwać z castingiem do (ViewGroup)
Mercury
24

Użyj ViewStub i określ układ widoku, który chcesz przełączyć. Obejrzeć:

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

Zniknąć:

mViewStub.setVisibility(View.GONE);
Sameer Segal
źródło
40
Ukrywanie to nie to samo, co usuwanie.
Darkwater
Jeśli chcesz ukryć / odkryć, możesz użyć .setVisibility (View.INVISIBLE) i .setVisibility (View.VISIBLE). Gdy widok jest niewidoczny, użytkownik nie może z nim wchodzić.
dennisschagt
Powiedzmy, że mam textView z dołączonym do niego onClickListener. Jeśli sprawię, że zniknie, a następnie go dotknę, czy zdarzenie będzie nadal działać?
ahitt6345
22

To najlepszy sposób

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

Jeśli masz układ XML, nie musisz dodawać dynamicznie. Po prostu zadzwoń

lp.removeViewAt(0);
Tofeeq Ahmad
źródło
Jaka będzie różnica w wydajności? Mam na myśli różnicę w wydajności dodawania ich dynamicznie lub umieszczania ich w statycznym pliku układu xml i pozwalania na zawyżenie?
stdout
19

Aby dodać widok do układu, możesz użyć addViewmetody ViewGroupklasy. Na przykład,

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

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

Istnieje również kilka metod usuwania. Sprawdź dokumentację ViewGroup . Jednym prostym sposobem usunięcia widoku z układu może być:

layout.removeAllViews(); // then you will end up having a clean fresh layout
Abel Terefe
źródło
4
removeAllViews () jest tym, czego szukałem!
Alan
6

Do zmiany widoczności:

predictbtn.setVisibility(View.INVISIBLE);

Do usunięcia:

predictbtn.setVisibility(View.GONE);
Ameen Maheen
źródło
To rozwiązało mój problem, bardziej niż każda inna odpowiedź. Przydatne, jeśli tak jak ja, twoje tło lub niektóre parametry uniemożliwiają całkowite zniknięcie widoku.
Virthuss
1
Dzieje się tak, ponieważ View.GONE nie usuwa widoku układu, tylko czyni go niewidocznym i nie zajmuje miejsca do celów układu.
Victor
6

Świetna odpowiedź od Sameera i Abla Terefe. Jednak gdy usuwasz widok, w mojej opcji chcesz usunąć widok z określonym identyfikatorem. Oto jak to robisz.

1, nadaj widokowi identyfikator podczas jego tworzenia:

_textView.setId(index);

2, usuń widok o identyfikatorze:

removeView(findViewById(index));
Kai Wang
źródło
1

możesz użyć addView lub 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
źródło
0

cześć, jeśli jesteś nowy w Androidzie, użyj w ten sposób Zastosuj swój widok, aby zniknął, jest jeden sposób, w przeciwnym razie zdobądź widok rodzica i usuń z niego dziecko ..... w przeciwnym razie pobierz układ nadrzędny i użyj tego metoda an remove all child parentView.remove (child)

Sugerowałbym użycie podejścia GONE ...

Zala Janaksinh
źródło
1
GONE skutecznie ukryje widok, ale nie usunie go z układu
Sababado
1
Proste użycie parentView.remove (removeViewName);
Zala Janaksinh
Masz rację, ale próbowałem zasugerować, że nie odpowiedziałeś na pytanie, podając rozwiązanie „GONE”.
Sababado
0

Usuwam widok za pomocą metody start i count, dodałem widok 3 w układzie liniowym.

view.removeViews (0, 3);

Sanjay Goswami
źródło
0

Rozwiązanie wielokrotnego użytku Kotlin

Uprość usuwanie

Dodaj to rozszerzenie:

myView.removeSelf()

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

Uprość dodawanie

Oto kilka opcji:

// 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
źródło