1

In meiner App habe ich Navigation Schublade, So habe ich eine MainActivity und Rest sind Fragmente. Meine App funktioniert gut. Immer wenn ich zurück Knopf drücke es redirect zum vorherigen fragment.it funktioniert gut. Aber was ich will, ist nach erfolgreicher Zahlung ich zeige erfolgreiche Zahlung Seite, auf dieser Seite, wenn Benutzer drücken Sie die Taste Ich möchte umleiten zu HomeFragment, aber jetzt geht es zum Platzierungsfragment.Onbackpressed Umleitung zu bestimmten Fragment

@Override 
    public void onBackPressed() { 
     if(getFragmentManager().getBackStackEntryCount() == 0) { 
      super.onBackPressed(); 
     } 
     else { 
      getFragmentManager().popBackStack(); 
     } 
    } 
+0

wenn Zahlung ist erfolgreich, entfernen Sie alle anderen Fragment, zeigen Sie das SuccessfulPa an Yment-Seite, dann entfernen Sie es nach ein paar Sekunden – MohammedAlSafwan

+0

wie das zu tun? – chris

+0

probieren Sie Ihr diese ersetzen, wenn die Bedingung mit if (! ActiveFragment.onBackPressed()), ich denke, es wird gut –

Antwort

0

Ihre onBackPress Methode überschreiben:

@Override 
public void onBackPressed() { 
    if (fragment != null && fragment.getChildFragmentManager().getBackStackEntryCount() > 0){ 
    fragment.getChildFragmentManager().popBackStack(); 
    }else { 
    super.onBackPressed(); 
    } 
} 
0

Sie sollten Funktion, wie unten in der abstrakten Klasse Fragment simulieren

/** 
    * Handle "Back" key pressed. 
    * @return TRUE if the "Back" key pressed was handled. FALSE indicate it's not handled and parent class can handle it. 
    */ 
    public abstract boolean onBackPressed() 

Und in MainActivity, werden Sie diese Funktion behandeln

 @Override 
    public void onBackPressed() { 
     if (mSelectedFragment != null && mSelectedFragment.onBackPressed()) { 
      return; 
     } else { 
      super.onBackPressed 
     } 
    } 
+0

arbeiten, was mSelectedFragment ist – chris

+0

Fragment im sichtbaren Zustand befindet, mit Benutzeroberfläche integrieren –

+0

, wo ich diese Methode aufrufen kann – chris

0

Verwendung:

fragmentTransaction.replace(R.id.fragment_container, mFeedFragment); 
fragmentTransaction.commit(); 

Don tu das nicht:

fragmentTransaction.addToBackStack(null); 
+0

einfach anrufen, dass Home-Fragment, aber nicht mit addToBackStack – Rahul

+0

aber wo kann ich dies anrufen – chris

+0

Actualy die Zurück-Taste sollte nicht Benutzer irgendwo auf der Rückseite drücken, halten user dort nur und Schaltfläche hinzufügen und Benutzer zu homeFragment – Rahul

0

Eine Möglichkeit wäre vorheriges Fragment gespart werden (previousFragment) Variable, während neues Fragment zu öffnen und es null zu machen, wenn Sie in dem ersten oder Platzhalter Fragmente sind .... dann Wert überprüft von previousFragment innerhalb onBackPressed Methode, wenn null durchführen Exit-Operation else ersetzen Fragment mit previousFragment, mit dem Sie zurück zum vorherigen Fragment auf Back drücken werden.

+0

Ich möchte nicht vorher Fragment .. nur für die Zahlung erfolgreich gehen – chris

0

in Ihrem onBackPressed() wie folgt tun:

@Override 
    public void onBackPressed() { 
     if(getSupportFragmentManger.findFragmentByTag("paymentFragment") != null){ 
      //add homeFragment; 
     } 
     else{ 
      if(getFragmentManager().getBackStackEntryCount() == 0) { 
       super.onBackPressed(); 
      } 
      else { 
       getFragmentManager().popBackStack(); 
      } 
     } 
    } 
0

Sie einige globale Variable setzen kann (true, wenn die Zahlung Erfolg sonst falsch ist) in Anwendungsklasse und in Wenn Sie Ihre Aktivität überprüfen, prüfen Sie einfach, ob die Variable wahr ist oder nicht. Rufen Sie diese Funktion dann auf, wenn Sie Ihre Aktivität zurückverfolgen.

public void clearBackStack() { 
     FragmentManager manager = getSupportFragmentManager(); 
     if (manager.getBackStackEntryCount() > 0) { 
      FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0); 
      manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     } 
    } 
0

diese einfache Methode Folgen eine ganze Zahl deklarieren

public int count; 

diese Zählung als count=0 in Ihrer Hauptseite

jetzt sind diese in Ihrer Haupttätigkeit initialisieren

@Override 
public void onBackPressed() { 
    if (count == 1) { 
     if (exit) { 
      super.onBackPressed(); 
      return; 
     } else { 
      Toast.makeText(this, "Press Back again to Exit.", Toast.LENGTH_SHORT).show(); 
      exit = true; 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        exit = false; 
       } 
      }, 2000); 
     } 
    }else { 
     toolbar.setTitle("Home"); 
     mDrawerLayout.closeDrawers(); 
     count=1; 
     display(0); 
    } 
} 
Verwandte Themen