In meiner Fragment-Klasse füge ich meinem Layout bedingt ein untergeordnetes Ansichtselement hinzu:
LinearLayout child = (LinearLayout) inflater.inflate(R.layout.child_view, null);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,100);
container.addView(child, params);
Da der obige Code bedingt ausgeführt wird, möchte ich irgendwann prüfen, ob die untergeordnete Ansicht hinzugefügt hat oder nicht []. Wie kann diese Überprüfung programmgesteuert erfolgen?
Ich denke du kannst es einfach benutzen
findViewById(your_view_id)
methode: Wenn das Ergebnis null ist, ist die Ansicht nicht vorhanden, andernfalls ist die Ansicht vorhanden
Wenn Sie eine Ansicht über einen Inflater erstellen, können Sie seine Eltern überprüfen
if(view.getParent() != null) {...}
Entschuldigen Sie die späte Antwort, aber Sie können diese Alternative ausprobieren:
verwenden Sie container.getChildCount();
vor dem Hinzufügen und nach dem Hinzufügen einer Ansicht. Mögen :
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();
Wenn Sie eine view -Instanz suchen, können Sie:
if (container.indexOfChild(childView) == -1) {
// Add child to container.
}
Ich kann keinen Kommentar schreiben, also schreibe ich ihn hier als Lösung: Ab API-Ebene 19 können Sie isAttachedToWindow()
aufrufen, was nicht viel hilft, aber wenn Sie auf API 19
oder höher zielen, sollte dies anhand der Dokumentation funktionieren.
Mit AndroidX
können Sie die Erweiterungsfunktion ViewGroup.contains(view: View): Boolean
verwenden.
vielleicht kannst du es versuchen
child.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
child.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// add to parent
}
});
oder dieses
child.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@Override
public void onViewAttachedToWindow(View v) {
}
@Override
public void onViewDetachedFromWindow(View v) {
}
});