Zurück navigation mit Fragmenten / Toolbar
Bin ich meinen Kopf kratzen mit diesem ein nun.... Ich habe eine ActionBarActivity
lädt, die eine erste Fragment
- das original-Menü wird aufgeblasen innerhalb der Aktivität. Nun, ich habe eine Navigations-bar, dass, wenn ein Element ausgewählt ist, lädt ein anderes fragment und fügt diese zu den backstack.
Wenn ich dies mache, gibt es ein paar Dinge, die ich einstellen will:
- Das Haus als Kennzeichen
- Verfall der Optionen-Menü von der Haupt-Tätigkeit
- Gesetzt hat Optionen auf true für das Fragment
- Sicherzustellen, dass die Kennzeichen korrekt navigiert zurück zum ursprünglichen Fragment
Etwas ziemlich seltsames passiert auf der up-Anzeige erscheint nur einmal und nicht so Verhalten, wie die Taste zurück, und zwar hab ich entwertet und aufgeblasen, ein neues Menü, das Menü neu wird angehängt, um die ursprüngliche Aktivität-Menü.
EDIT: Ok hab ich behoben das Anhängen von Problem - habe vergessen hinzuzufügen menu.clear()
im onCreateOptionsMenu
Methode.
Meine navigation drawer-layout hat onClick
Methoden, um alle Menüpunkte, die auslösen würde, die den laden von einem anderen Fragment:
public void navItemClick(View view) {
switch (view.getId()) {
case R.id.ripSMS:
mNavigationDrawer.toggleHome(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
FragmentTransaction mTrans = getSupportFragmentManager().beginTransaction();
mTrans.replace(R.id.voiceover_frame_layout,new MessageFragment(),"main_ui")
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack("msg").commit();
break;
case R.id.ripEmail:
break;
case R.id.ripSettings:
break;
}
mNavigationDrawer.closeDrawer();
}
toggleHome:
public void toggleHome(boolean show) {
mDrawerToggle.setDrawerIndicatorEnabled(show);
if (!show) {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
} else {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
Sobald das Element ausgelöst wird, wird der onCreate
enthält das erlöschen und die hasOptions code:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().invalidateOptionsMenu();
setHasOptionsMenu(true);
}
Den onCreateOptionsMenu
dann bläst ein weiteres Menü layout (enthält ein einzelnes Element namens Einstellungen).
Wie bereits erwähnt, ist dies nur teilweise funktioniert, einmal - das erste mal, dass ich mit der item-laden das Fragment, bekomme ich das Symbol zurück, aber es ist auch nicht zu arbeiten (dies ist in onOptionsItemSelected
check für zu Hause Element drücken - es tut sich nichts). Wenn ich drücken Sie die zurück-Taste bringt mich zurück zu der richtigen Stelle. Wenn ich Sie jedoch wieder, die "zurück" - Pfeil jetzt mehr zeigt, obwohl der code läuft durch onCreate
!
InformationsquelleAutor Hamz4h_ | 2015-03-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok so habe ich es geschafft, dies zu lösen, nachdem einige Versuch und Irrtum. Zwei änderungen vorgenommen:
addOnBackStackChangedListener
ActionBarDrawerToggle's
setToolbarNavigationClickListener
musste eingestellt werdenDa ich nur eine Aktivität (alles andere ist Fragment-Klassen) habe ich den backstack-listener zu der Übergeordneten Aktivität
onCreate
Methode:Dadurch behoben wurde, das verschwand, zurück Pfeil beim gehen zurück zu dem fragment. Schließlich fügte die Zuhörer zu meiner NavigationDrawer setup-Klasse:
Ich nehme an, der nur Fragen, die ich habe, ist alles darauf hin, dass mit der
onOptionsItemSelected
Methode mitandroid.R.id.home
aber das nie für mich gearbeitet. Es könnte der Weg sein, habe ich umgesetzt, die Dinge natürlich, aber wenn jemand etwas sieht offensichtlich, warum bitte lassen Sie mich wissen!InformationsquelleAutor Hamz4h_
Diese Schritte hilft Ihnen, zeigen zurück-Taste in der Symbolleiste, wenn ein fragment geladen wird. Und um pop-out, wenn seine geklickt.
Set
setNavigationOnClickListener
toolbar in Sie Aktivität.Implementieren
FragmentManager.OnBackStackChangedListener
im Sie Aktivität. Und registrieren Sie es mitSupportFragmentManager
imOnCreate()
OnBackStackChangedListener
Umsetzung Methode:toggle.syncState();
war ein wichtiger Faktor, weil ansonsten die burger-Menü ist nicht sichtbar, wenn Sie zurück gehen.InformationsquelleAutor mustaq
Für mich der obigen Antwort nicht genug war, aber ich habe @Hamz4h_ und fügte einige mehr nach dem Graben in die ActionBarDrawerToggle Klasse. Ich bin nur dem Aufruf dieser Methode von mir aus dem activity onCreate:
Hoffe, dies hilft jemand 🙂
InformationsquelleAutor Shirane85