Ajouter et supprimer une vue de la mise en page

94

Comment puis-je ajouter et supprimer une vue d'une mise en page?

chiranjib
la source
quel genre de mise en page? pourriez-vous s'il vous plaît coller une partie du code sur lequel vous travaillez?
Cristian le
3
Comment est-ce bien préparé?
Cornelius

Réponses:

219

Je l'ai fait comme ça:

((ViewManager)entry.getParent()).removeView(entry);
Nathan Schwermann
la source
44
Dans les nouveaux SDK, c'est (ViewGroup):)
Ron
@schwiz comment pouvons-nous réinitialiser les identifiants de vue dans ce cas.Mon problème est que même après la fin de mon activité chaque fois que la vue suivante est ajoutée, l'identifiant de la vue est incrémenté.Je veux que l'identifiant de la vue soit par défaut à 1 lorsque je reviens à cette activité .
AndroidNewBee
Merci beaucoup d'avoir donné cette réponse
ourlet
ViewGroup étend View implémente ViewParent, ViewManager. plus agréable de l'appeler avec un casting à (ViewGroup)
Mercury
23

Utilisez ViewStub et spécifiez la disposition de la vue que vous souhaitez basculer. Regarder:

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

Disparaître:

mViewStub.setVisibility(View.GONE);
Sameer Segal
la source
40
Cacher n'est pas la même chose que supprimer.
Darkwater
Si vous souhaitez masquer / afficher, vous pouvez utiliser .setVisibility (View.INVISIBLE) et .setVisibility (View.VISIBLE). Lorsque la vue est invisible, l'utilisateur ne peut pas interagir avec elle.
dennisschagt
Disons que j'ai un textView avec un onClickListener attaché. Si je le fais disparaître et que je tape dessus, l'événement se déclenchera-t-il toujours?
ahitt6345
22

C'est la meilleur façon

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

Si vous avez une mise en page XML, il n'est pas nécessaire d'ajouter dynamiquement.

lp.removeViewAt(0);
Tofeeq Ahmad
la source
Quelle sera la différence en termes de performances? Je veux dire la différence de performance de les ajouter dynamiquement ou de les mettre dans un fichier de mise en page xml statique et de le laisser gonfler?
stdout
19

Pour ajouter une vue à une mise en page, vous pouvez utiliser la addViewméthode de la ViewGroupclasse. Par exemple,

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

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

Il existe également un certain nombre de méthodes de suppression. Consultez la documentation de ViewGroup . Un moyen simple de supprimer la vue d'une mise en page peut être comme,

layout.removeAllViews(); // then you will end up having a clean fresh layout
Abel Terefe
la source
4
removeAllViews () est ce que je cherchais!
Alan
6

Pour changer la visibilité:

predictbtn.setVisibility(View.INVISIBLE);

Pour retirer:

predictbtn.setVisibility(View.GONE);
Ameen Maheen
la source
Cela a résolu mon problème, plus que toute autre réponse. Utile si comme moi, votre arrière-plan ou certains paramètres empêchent la vue de disparaître totalement.
Virthuss
1
c'est parce que View.GONE ne supprime pas la vue de la mise en page, la rend uniquement invisible et ne prend pas d'espace pour la mise en page.
Victor
6

Bonne réponse de Sameer et Abel Terefe. Cependant, lorsque vous supprimez une vue, dans mon option, vous souhaitez supprimer une vue avec un certain identifiant. Voici comment faire cela.

1, donnez à la vue un identifiant lorsque vous la créez:

_textView.setId(index);

2, supprimez la vue avec l'ID:

removeView(findViewById(index));
Kai Wang
la source
1

vous pouvez utiliser addView ou removeView

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
la source
0

salut si vous êtes nouveau dans Android utilisez de cette façon Appliquez votre vue pour la faire disparaître est une façon, sinon, prenez la vue parente et supprimez l'enfant à partir de là ..... sinon, obtenez la mise en page parent et utilisez ceci méthode et supprimer tout enfant parentView.remove (enfant)

Je suggérerais d'utiliser l'approche GONE ...

Zala Janaksinh
la source
1
GONE masquera effectivement la vue mais ne la supprimera pas de la mise en page
Sababado
1
Utilisez simplement le parentView.remove (removeViewName);
Zala Janaksinh
Vous avez raison, mais j'essayais de laisser entendre que vous ne répondiez pas à la question en fournissant la solution «GONE».
Sababado
0

Je supprime la vue en utilisant la méthode de démarrage et de comptage, j'ai ajouté 3 vues dans la disposition linéaire.

view.removeViews (0, 3);

Sanjay Goswami
la source
0

Solution d'extension réutilisable Kotlin

Simplifier la suppression

Ajoutez cette extension:

myView.removeSelf()

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

Simplifier l'ajout

Voici quelques options:

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