Levenscyclus van fragment – welke methode wordt aangeroepen bij show / hide?

Ik gebruik de volgende methode om te wisselen tussen fragmenten (in mijn navigatielade) door ze te tonen/verbergen.

protected void showFragment(int container, Fragment fragment, String tag, String lastTag, boolean addToBackStack ) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        if ( lastTag != null && !lastTag.equals("")) {
            Fragment lastFragment = fragmentManager.findFragmentByTag( lastTag );
            if ( lastFragment != null ) {
                transaction.hide( lastFragment );
            }
        }
        if ( fragment.isAdded() ) {
            transaction.show( fragment );
        }
        else {
            transaction.add( container, fragment, tag );
        }
        if ( addToBackStack ) {
            transaction.addToBackStack( tag );
        }
        transaction.commit();
        // set the active tag
        activeFragTag = tag;
    }

Waar ik niet zeker van ben, is welke methode van de Fragments-levenscyclus wordt aangeroepen wanneer ik deze laat zien of verbergen?(aangezien er geen methode is zoals onShow() of onHide() weet ik het niet helemaal zeker wat te gebruiken). Ik wil specifieke acties uitvoeren bij het tonen en verbergen van een bepaald fragment.


Antwoord 1, autoriteit 100%

Net als bij de levenscyclus van activiteiten, roept Android onStart() aan wanneer fragment zichtbaar wordt. onStop()wordt normaal gesproken aangeroepen wanneer een fragment onzichtbaar wordt, maar het kan ook later worden aangeroepen.

Afhankelijk van uw lay-out kan Android zelfs onStart()aanroepen, wanneer uw fragment nog niet zichtbaar is, maar bij een zichtbare bovenliggende container hoort. Dit is bijvoorbeeld geldig voor android.support.v4.view.ViewPagerwaarvoor u Fragment.setUserVisibleHint()methode. Als u BroadcastReceivers of andere luisteraars moet registreren/uitschrijven, kunt u in ieder geval veilig de methoden onStart()en onStop()gebruiken, omdat deze altijd worden aangeroepen.

Opmerking:Sommige fragmentcontainers kunnen ervoor zorgen dat onzichtbare fragmenten worden gestart. Om deze situatie aan te pakken, kunt u Fragment.onHiddenChanged(boolean hidden). Volgens de documentatiemoet een fragment worden zowel gestart als zichtbaar (niet verborgen), om zichtbaar te zijn voor de gebruiker.

Update:als je android.support.v4.widget.DrawerLayoutgebruikt, blijft een fragment onder de lade gestart en zichtbaar, zelfs als de lade open is. In dit geval moet u DrawerLayout.setDrawerListener()gebruiken en luisteren naar onDrawerClosed()en onDrawerOpened()callbacks.


Antwoord 2, autoriteit 60%

Ik @Overschrijf deze methode en los mijn probleem op:

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden) {
        //do when hidden
    } else {
       //do when show
    }
}

Antwoord 3, autoriteit 29%

natuurlijk kunt u hiervoor de volgende methode @Override gebruiken:

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {
            // Do your Work
        } else {
            // Do your Work
        }
    }

Other episodes