"Back" Button soll Activity nicht beenden

  • Hey folks, wieder mal ein kleines (Verständnis-)Problem worauf ihr sicher eine schnelle Lösung wisst.


    Ich starte mit meiner MainActivity folgendes layout.xml


    Also einfach nur ein leeres FrameLayout das ich zum ersetzen durch Fragmente "content_frame" genannt habe.
    Wenn der User nun ein Item auf dem NavigationDrawer auswählt wird das FrameLayout ( content_frame ) durch das neue Fragment ersetzt.


    NavDrawer...
    [Blockierte Grafik: http://preview.slick.pics/FUAUV2V23.png]


    Java
    DigIO digIO = new DigIO();
    //        digIO.setMainActivity();
            fm = getFragmentManager();
            ft = fm.beginTransaction();
            ft.replace(R.id.content_frame, digIO);
            ft.commit();
            fm.executePendingTransactions();

    Nun wird auf meiner MainActivity das neue Fragment angezeigt.
    Aus rein logischen Gründen sollte es nun auch möglich sein, das der User durch drücken der "Back"Taste auf das "leere" FrameLayout zurück wechseln kann.


    Diesen Ansatz wollte ich wie folgt lösen. Ich habe ein weiteres leeres Fragment erstellt das ich nun per Fragment replace() auf mein FrameLayout ( content_frame ) legen will. Da die App aber dennoch mit der Back-Taste zu beenden sein soll habe ich dieses Konstrukt ausgedacht.
    Wenn irgendein Fragment angezeigt wird, dann tausche es durch das MainBlankFragment.
    Wenn MainBlankFragment visible ist dann beende die App.


    Nur funktioniert das ganze nicht wie gedacht das meine MainActivity trotzdem beendet wird.
    Vielleicht weiss ja jemand Rat, möglich das ich auch einen komplett falschen Ansatz gewählt habe.


    LG proto

  • Das solltest Du alles dem Backstack des FragmentManagers überlassen.


    Heißt:
    jede FragmentTransaction (die Du da drin haben möchtest) ein beherztes addToBackStack().


    Bei jedem Touch auf den Back Button schaust Du dann via FragmentManager.getBackStackEntryCount(), ob es da noch einen Eintrag gibt.


    Falls ja: ein beherztes FragmentManager.popBackStack() (oder Konsorten)


    Falls nein: raus aus der App.


    Du kannst hier frei entscheiden, ob Du wirklich jeden Pups zurückverfolgen willst, oder immer nur, wenn sich durch eine bestimme Hierarchie gehangelt wurde.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Wieder mal vielen Dank Marco :thumbup:
    Lösung:

    Java
    case 2:
            DigIO digIO = new DigIO();
            FragmentManager fm = getFragmentManager();
            FragmentTransaction ft = fm.beginTransaction();
            ft.replace(R.id.content_frame, digIO);
            ft.addToBackStack(DigIO.TAG);
            ft.commit();
            fm.executePendingTransactions();
            break;

    und wenn man in der onBackPressed() die "super.onBackPressed()" nicht gleich am Anfang aufruft dann funktioniert das ganze auch wie gewollt :P


  • wenn man in der onStop() die "super.onStop()" nicht gleich am Anfang aufruft dann funktioniert das ganze auch wie gewollt :P

    In der Tat, die Life Cycles sind schon wichtig. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!