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?
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
Si vous créez une vue via inflater, vous pouvez vérifier son parent
if(view.getParent() != null) {...}
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();
Ou si vous avez une vue instance à trouver, vous pouvez:
if (container.indexOfChild(childView) == -1) {
// Add child to container.
}
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.
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) {
}
});