it-swarm.com.de

Woher wissen, ob ein Fragment sichtbar ist?

Ich verwende die Unterstützungsbibliothek v4 und frage mich, ob ein Fragment sichtbar ist. und Wie kann ich die Eigenschaften des im Fragment aufgeblasenen Layouts ändern? Danke im Voraus.

---Bearbeiten---

Ich verwende Fragmente wie im Android Entwickler-Tutorial mit einer FragmentActivity

Sie sollten in der Lage sein, Folgendes zu tun:

MyFragmentClass test = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("testID");
if (test != null && test.isVisible()) {
     //DO STUFF
}
else {
    //Whatever
}
73
TronicZomB

Sowohl isVisible() als auch isAdded() geben true zurück, sobald Fragment erstellt wurde, und sind nicht einmal wirklich sichtbar. Die einzige Lösung, die wirklich funktioniert, ist:

if (isAdded() && isVisible() && getUserVisibleHint()) {
    // ... do your thing
}

Das macht den Job. Zeitraum.

23
Y.S

Wenn Sie wissen möchten, wann der Gebrauch das Fragment betrachtet, sollten Sie verwenden

yourFragment.isResumed()

anstatt

yourFragment.isVisible()

Zunächst prüft isVisible() bereits auf isAdded(), sodass nicht beide aufgerufen werden müssen. Zweitens bedeutet, dass der Benutzer Ihr Fragment tatsächlich sieht. Nur isResumed() stellt sicher, dass sich Ihr Fragment vor dem Benutzer befindet und der Benutzer mit ihm interagieren kann, wenn Sie danach suchen.

19
Kayvan N

du kannst es so versuchen:

Fragment currentFragment = getFragmentManager().findFragmentById(R.id.fragment_container);

oder

Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);

In diesem Fall prüfen Sie, ob currentFragment eine Instanz von YourFragment ist

if (currentFragment instanceof YourFragment) {
     Log.v(TAG, "your Fragment is Visible");
}
14
Cabezas

getUserVisibleHint() gilt nur dann als wahr, wenn das Fragment in der Ansicht und sichtbar ist

9
Mitech

Sie können setMenuVisibility wie folgt überschreiben:

@Override
public void setMenuVisibility(final boolean visible) {
   if (visible) {
      //Do your stuff here
   }

   super.setMenuVisibility(visible);
}
8
Mikel

Zu beachten ist, dass isVisible() den sichtbaren Zustand des Fragments current zurückgibt. In der Unterstützungsbibliothek ist ein Problem aufgetreten. Wenn Sie Fragmente verschachtelt haben und das übergeordnete Fragment (und damit alle untergeordneten) ausblenden, sagt das untergeordnete Element, dass es weiterhin sichtbar ist.

isVisible() ist final, kann also leider nicht überschrieben werden. Meine Problemumgehung bestand darin, eine BaseFragment -Klasse zu erstellen, die alle meine Fragmente erweitert, und anschließend eine Methode wie die folgende zu erstellen:

public boolean getIsVisible()
{
    if (getParentFragment() != null && getParentFragment() instanceof BaseFragment)
    {
        return isVisible() && ((BaseFragment) getParentFragment()).getIsVisible();
    }
    else
    {
        return isVisible();
    }
}

Ich mache isVisible() && ((BaseFragment) getParentFragment()).getIsVisible();, weil wir false zurückgeben möchten, wenn any der übergeordneten Fragmente ausgeblendet sind.

Dies scheint den Trick für mich zu tun.

7
logan
ArticleFragment articleFrag = (ArticleFragment)
            getSupportFragmentManager().findFragmentById(R.id.article_fragment);

    if (articleFrag != null && articleFrag.isVisible()) {

        // Call a method in the ArticleFragment to update its content
        articleFrag.updateArticleView(position);
    }

siehe http://developer.Android.com/training/basics/fragments/communicating.html

2
Alex