Ajouter et supprimer une vue de la mise en page


94

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


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);

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);

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);

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

4
removeAllViews () est ce que je cherchais!
Alan

6

Pour changer la visibilité:

predictbtn.setVisibility(View.INVISIBLE);

Pour retirer:

predictbtn.setVisibility(View.GONE);

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));

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)

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


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);


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)
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.