Aggiungi ed elimina vista dal layout


94

Come posso aggiungere ed eliminare una vista da un layout?


che tipo di layout? potresti incollare parte del codice su cui stai lavorando?
Cristian,

3
Come è ben preparato?
Cornelius

Risposte:


219

L'ho fatto così:

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

44
Negli SDK più recenti è (ViewGroup):)
Ron

@schwiz come possiamo reimpostare gli ID della vista in questo caso Il mio problema è anche dopo che la mia attività finisce ogni volta che viene aggiunta la vista successiva, l'id della vista viene incrementato.Voglio che l'ID della vista sia predefinito su 1 quando torno di nuovo a questa attività .
AndroidNewBee

Grazie mille per aver dato questa risposta
ehm

ViewGroup estende View implementa ViewParent, ViewManager. più bello chiamarlo con casting a (ViewGroup)
Mercury

23

Utilizzare ViewStub e specificare il layout della visualizzazione che si desidera attivare. Vedere:

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

Scomparire:

mViewStub.setVisibility(View.GONE);

40
Nascondere non è la stessa cosa che rimuovere.
Darkwater

Se vuoi nascondere / mostrare puoi usare .setVisibility (View.INVISIBLE) e .setVisibility (View.VISIBLE). Quando la vista è invisibile, l'utente non può interagire con essa.
dennisschagt

Diciamo che ho un textView con un onClickListener allegato. Se lo faccio scomparire e poi lo tocco, l'evento si attiverà comunque?
ahitt6345

22

Questo è il modo migliore

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

Se si dispone di un layout xml, non è necessario aggiungere dinamically.just call

lp.removeViewAt(0);

Quale sarà la differenza in termini di prestazioni? Intendo la differenza di prestazioni di aggiungerli dinamicamente o metterli in un file di layout xml statico e lasciarlo gonfiare?
stdout

19

Per aggiungere una vista a un layout, puoi usare il addViewmetodo della ViewGroupclasse. Per esempio,

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

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

Esistono anche diversi metodi di rimozione. Controlla la documentazione di ViewGroup . Un modo semplice per rimuovere la visualizzazione da un layout può essere come,

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

4
removeAllViews () è quello che stavo cercando!
Alan

6

Per modificare la visibilità:

predictbtn.setVisibility(View.INVISIBLE);

Per rimuovere:

predictbtn.setVisibility(View.GONE);

Ha risolto il mio problema, più di ogni altra risposta. Utile se come me, il tuo background o alcuni parametri impediscono alla vista di scomparire totalmente.
Virthuss

1
è perché View.GONE non rimuove la vista per il layout, la rende solo invisibile e non occupa spazio per scopi di layout.
Victor

6

Ottima risposta da Sameer e Abel Terefe. Tuttavia, quando rimuovi una vista, a mia scelta, vuoi rimuovere una vista con un certo ID. Ecco come puoi farlo.

1, assegna un ID alla vista quando la crei:

_textView.setId(index);

2, rimuovi la vista con l'ID:

removeView(findViewById(index));

1

puoi usare addView o removeView

Giava:

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

ciao se sei nuovo in Android usa in questo modo Applica la tua vista per farla sparire GONE è un modo, altrimenti prendi possesso della vista genitore e rimuovi il bambino da lì ..... altrimenti prendi il layout genitore e usa questo metodo e rimuove tutto il figlio parentView.remove (figlio)

Suggerirei di utilizzare l'approccio GONE ...


1
GONE nasconderà effettivamente la visuale ma non la rimuoverà dal layout
Sababado

1
Usa semplicemente parentView.remove (removeViewName);
Zala Janaksinh

Hai ragione su questo, ma stavo cercando di suggerire che non stavi rispondendo alla domanda fornendo la soluzione "GONE".
Sababado

0

Sto rimuovendo la vista utilizzando il metodo di avvio e conteggio, ho aggiunto 3 viste nel layout lineare.

view.removeViews (0, 3);


0

Soluzione di estensione riutilizzabile Kotlin

Semplifica la rimozione

Aggiungi questa estensione:

myView.removeSelf()

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

Semplifica l'aggiunta

Ecco alcune opzioni:

// 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)
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.