Fragment Lebenszyklus – welche Methode wird aufgerufen / verstecken?

Ich benutze die folgende Methode, um zwischen Fragmenten (in meinem NavigationsDrawer) zu wechseln, indem du sie versteckst.

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; } 

Was ist mir unklar, welche Methode des Fragments-Lebenszyklus heißt, wenn ich es zeige oder verstecke? (Da gibt es keine Methode wie onShow () oder onHide () im nicht ganz sicher, was zu tauschen). Ich möchte spezifische Aktionen machen, um ein bestimmtes Fragment zu zeigen und zu verstecken.

  • Was ist die modale Auswahl Auswahl Modus?
  • Wie bekomme ich die Bildschirmauflösung eines Android-Gerätes mit LIBGDX?
  • Eine riesige Karte mit guter Leistung auf Android anzeigen?
  • Android import java.nio.file.Files; kann nicht gelöst werden
  • ViewPager.setOffscreenPageLimit (0) funktioniert nicht wie erwartet
  • Wie bekomme ich rohe Vorschau-Daten aus Kamera-Objekt mindestens 15 Bilder pro Sekunde in Android?
  • Was h.264 Format lädt auf Android and IOS?
  • Google's Sprachsuche Spracherkennung Service
  • Was ist die android_metadata Tabelle?
  • FirebaseInitProvider: FirebaseApp Initialisierung nicht erfolgreich
  • Einstellen von Button Text Schriftart in Android
  • Was verwenden wir für Android N Netzwerk Sicherheitskonfiguration für ein selbst signiertes Zertifikat?
  • 6 Solutions collect form web for “Fragment Lebenszyklus – welche Methode wird aufgerufen / verstecken?”

    Ähnlich wie die Aktivität Lifecycle, Android Anrufe onStart (), wenn Fragment sichtbar wird. onStop() wird normalerweise angerufen, wenn das Fragment unsichtbar wird, aber es kann auch später aufgerufen werden.

    Abhängig von Ihrem Layout kann Android onStart() sogar aufrufen, wenn Ihr Fragment noch nicht sichtbar ist, aber es gehört zu einem sichtbaren übergeordneten Container. Dies gilt zum android.support.v4.view.ViewPager für android.support.v4.view.ViewPager dem Sie die Fragment.setUserVisibleHint() Methode überschreiben müssen. In jedem Fall, wenn Sie BroadcastReceivers oder andere Zuhörer registrieren / onStart() , können Sie onStart() und onStop() Methoden sicher verwenden, da diese immer aufgerufen werden.

    Anmerkung: Einige Fragmentbehälter können unsichtbare Fragmente beenden lassen. Um diese Situation zu bewältigen, kannst du Fragment.onHiddenChanged(boolean hidden) überschreiben. Nach der Dokumentation muss ein Fragment sowohl gestartet als auch sichtbar (nicht versteckt) sein , um für den Benutzer sichtbar zu sein.

    Update: Wenn Sie android.support.v4.widget.DrawerLayout dann ist ein Fragment unterhalb der Schublade gestartet und sichtbar, auch wenn die Schublade geöffnet ist. In diesem Fall müssen Sie DrawerLayout.setDrawerListener() und auf onDrawerClosed() und onDrawerOpened() Rückrufe hören.

    I @Override diese Methode und lösen mein Problem:

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

    Off-course können Sie @Overriede folgende Methode, um dies zu tun:

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

    setUserVisibleHint Aufruf vor onCreateView . Und du kannst keine Ansicht in setUserVisibleHint Ich benutze

     public void setMenuVisibility(final boolean visible) 

    Für die Sichtbarkeit und onHiddenChanged () hat nicht zum ersten Mal aufgerufen . Es ruft an, wenn sich der versteckte Zustand ändert. Da ein fragment is visible by default . Um diese Methode zum ersten Mal zu erreichen, musst du mFragmentTransaction.hide(oldFragment) dann wird es funktionieren

    Hinweis

    Wenn Sie setUserVisible-Tipp verwenden und aktualisieren möchten, verwenden Sie diese Methode

    Versuchen Sie diesen Code:

     @Override public void setUserVisibleHint(boolean visible) { super.setUserVisibleHint(visible); if (visible && isResumed()) { onResume(); } } @Override public void onResume() { super.onResume(); if (!getUserVisibleHint()) { return; } //Add your code this section } 

    Versuche es einfach in deinem setUserVisibleHint ()

     @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser && getView() != null){ isActive = true; init(); }else if(isVisibleToUser && getView() == null){ isActive = false; }else{ isActive = true; } } 

    Und schaffe diesen Code in onCreateView () :

     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if(!isActive){ init(); } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.