webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob das Ansichtselement zum Layout hinzugefügt oder nicht programmgesteuert ist

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?

27
Mellon

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 

23
Apperside

Wenn Sie eine Ansicht über einen Inflater erstellen, können Sie seine Eltern überprüfen

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

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();
20
imthegiga

Wenn Sie eine view -Instanz suchen, können Sie:

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

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.

5
ktamas

Mit AndroidX können Sie die Erweiterungsfunktion ViewGroup.contains(view: View): Boolean verwenden.

1
int_32

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

        }
    });
0
kewei xia