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.

  • Ändern Sie ActionBar Titeltextfarbe mit Light.DarkActionBar Thema in AppCompat 21
  • Wie kann man überprüfen, ob ein Benutzer Google+ angemeldet hat?
  • Gradle Error - Kann IncrementalTask.taskAction () auf Task 'nicht aufrufen': project: mergeDebugResources '
  • Wie man eine untere Navigationsleiste vor dem Aufschieben auf der Tastatur gedrückt hält
  • Wann soll ich mit dem neuen Android SDK 3.0 von Facebook beantragen?
  • Einstellung startMode = "singleTask" vs Einstellungsaktivität launchMode = "singleTop"
  • Verwenden einer SQLite-Datenbank in Libgdx
  • Android PagerAdapter nicht aufrufen instantiateItem
  • Android Service erweitert ResultReceiver für IntentService, wie man CREATOR implementiert?
  • Setup twitter Stoff sdk für Cordova Plugin
  • Benutzerdefinierte Filterung in Android mit ArrayAdapter
  • WebView lädt mein HTML nicht zum zweiten Mal?
  • 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.