Ansicht zum Layout hinzufügen und daraus löschen

94

Wie kann ich eine Ansicht zu einem Layout hinzufügen und daraus löschen?

Chiranjib
quelle
Was für ein Layout? Könnten Sie bitte einen Teil des Codes einfügen, an dem Sie arbeiten?
Cristian
3
Wie ist das gut vorbereitet?
Cornelius

Antworten:

219

Ich habe es so gemacht:

((ViewManager)entry.getParent()).removeView(entry);
Nathan Schwermann
quelle
44
In den neueren SDKs ist es (ViewGroup):)
Ron
@schwiz Wie können wir in diesem Fall die Ansichts-IDs zurücksetzen? Mein Problem ist, dass die Ansichts-ID erhöht wird, selbst wenn meine Aktivität beendet ist, wenn die nächste Ansicht hinzugefügt wird. Ich möchte, dass die Ansichts-ID standardmäßig auf 1 gesetzt wird, wenn ich wieder zu dieser Aktivität zurückkehre .
AndroidNewBee
Vielen Dank für diese Antwort gab
hem
ViewGroup erweitert View implementiert ViewParent, ViewManager. Schöner, es mit Casting zu (ViewGroup) zu nennen
Mercury
23

Verwenden Sie ViewStub und geben Sie das Layout der Ansicht an, die Sie umschalten möchten. Sehen:

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

Verschwinden:

mViewStub.setVisibility(View.GONE);
Sameer Segal
quelle
40
Verstecken ist nicht dasselbe wie Entfernen.
Darkwater
Wenn Sie ein- oder ausblenden möchten, können Sie .setVisibility (View.INVISIBLE) und .setVisibility (View.VISIBLE) verwenden. Wenn die Ansicht unsichtbar ist, kann der Benutzer nicht mit ihr interagieren.
Dennisschagt
Angenommen, ich habe eine Textansicht mit einem angehängten onClickListener. Wenn ich es verschwinden lasse und dann darauf tippe, wird das Ereignis dann immer noch ausgelöst?
ahitt6345
22

Dies ist der beste Weg

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

Wenn Sie ein XML-Layout haben, müssen Sie es nicht dynamisch hinzufügen

lp.removeViewAt(0);
Tofeeq Ahmad
quelle
Was wird der Unterschied in Bezug auf die Leistung sein? Ich meine den Leistungsunterschied, wenn man sie dynamisch hinzufügt oder in eine statische XML-Layoutdatei einfügt und sie aufblasen lässt?
Stdout
19

Um einem Layout eine Ansicht hinzuzufügen, können Sie die addViewMethode der ViewGroupKlasse verwenden. Beispielsweise,

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

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

Es gibt auch eine Reihe von Entfernungsmethoden. Überprüfen Sie die Dokumentation von ViewGroup . Eine einfache Möglichkeit, die Ansicht aus einem Layout zu entfernen, kann sein:

layout.removeAllViews(); // then you will end up having a clean fresh layout
Abel Terefe
quelle
4
removeAllViews () ist das, wonach ich gesucht habe!
Alan
6

Zum Ändern der Sichtbarkeit:

predictbtn.setVisibility(View.INVISIBLE);

Zum Entfernen:

predictbtn.setVisibility(View.GONE);
Ameen Maheen
quelle
Es hat mein Problem behoben, mehr als jede andere Antwort. Nützlich, wenn wie ich Ihr Hintergrund oder einige Parameter verhindern, dass die Ansicht vollständig verschwindet.
Virthuss
1
Dies liegt daran, dass View.GONE die Ansicht für das Layout nicht entfernt, sondern nur unsichtbar macht und keinen Platz für Layoutzwecke benötigt.
Victor
6

Großartige Antwort von Sameer und Abel Terefe. Wenn Sie jedoch eine Ansicht entfernen, möchten Sie nach meiner Option eine Ansicht mit einer bestimmten ID entfernen. Hier ist, wie machst du das?

1, geben Sie der Ansicht eine ID, wenn Sie sie erstellen:

_textView.setId(index);

2, entfernen Sie die Ansicht mit der ID:

removeView(findViewById(index));
Kai Wang
quelle
1

Sie können addView oder removeView verwenden

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)
Rasoul Miri
quelle
0

Hallo, wenn Sie neu in Android sind, verwenden Sie diese Methode. Wenden Sie Ihre Ansicht an, um sie verschwinden zu lassen. GEGANGEN ist eine Möglichkeit. Andernfalls greifen Sie auf die übergeordnete Ansicht zu und entfernen Sie das untergeordnete Element von dort. Andernfalls rufen Sie das übergeordnete Layout ab und verwenden Sie dieses Methode und entferne alle untergeordneten parentView.remove (untergeordneten)

Ich würde vorschlagen, den GONE-Ansatz zu verwenden ...

Zala Janaksinh
quelle
1
GONE wird die Ansicht effektiv ausblenden, aber nicht aus dem Layout entfernen
Sababado
1
Verwenden Sie einfach die parentView.remove (removeViewName).
Zala Janaksinh
Da haben Sie Recht, aber ich wollte darauf hinweisen, dass Sie die Frage nicht mit der Lösung "GONE" beantwortet haben.
Sababado
0

Ich entferne die Ansicht mit der Start- und Zählmethode. Ich habe 3 Ansichten im linearen Layout hinzugefügt.

view.removeViews (0, 3);

Sanjay Goswami
quelle
0

Wiederverwendbare Kotlin-Verlängerungslösung

Vereinfachen Sie das Entfernen

Fügen Sie diese Erweiterung hinzu:

myView.removeSelf()

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

Vereinfachen Sie das Hinzufügen

Hier sind einige Optionen:

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