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.