web-dev-qa-db-fra.com

Vérifier si l'élément de vue est ajouté à la présentation ou non par programme

Dans ma classe fragment, j'ajoute un élément de vue enfant par programme à ma mise en page de manière conditionnelle:

LinearLayout child = (LinearLayout) inflater.inflate(R.layout.child_view, null);

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,100);

container.addView(child, params);

Etant donné que le code ci-dessus sera exécuté de manière conditionnelle, alors, à un moment donné, je voudrais vérifier si la vue enfant a été ajoutée ou non , comment effectuer cette vérification par programme?

27
Mellon

Je pense que vous pouvez simplement utiliser 

findViewById(your_view_id) 

method: Si son résultat est null, la vue n'existe pas, sinon la vue est présente 

23
Apperside

Si vous créez une vue via inflater, vous pouvez vérifier son parent

if(view.getParent() != null) {...}
36
cooperok

Désolé pour la réponse tardive mais vous pouvez essayer cette alternative:

utilisez container.getChildCount(); avant d'ajouter et après l'ajout d'une vue. Comme :

int x = container.getChildCount();

container.addView(child, params);

int y = container.getChildCount();

if(y > x)
   Toast.makeText(context, "View Successfully Added!", Toas.LENGTH_SHORT).show();
20
imthegiga

Ou si vous avez une vue instance à trouver, vous pouvez:

if (container.indexOfChild(childView) == -1) {
  // Add child to container.
}
6
Zon

Je ne peux pas écrire de commentaire, je l’écris ici sous forme de solution: À partir du niveau 19 de l’API, vous pouvez appeler isAttachedToWindow(), ce qui n’aide en rien, mais si vous visez API 19 ou une version plus récente, la documentation devrait en tenir compte.

5
ktamas

peut-être que tu peux essayer ça

child.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            child.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            // add to parent
        }
    });

ou celui-ci

child.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
        @Override
        public void onViewAttachedToWindow(View v) {

        }

        @Override
        public void onViewDetachedFromWindow(View v) {

        }
    });
0
kewei xia