Wechseln zwischen dem Android Navigation Drawer-Bild und dem Up Caret, wenn Fragmente verwendet werden
Bei Verwendung der Navigationsleiste empfehlen die Android-Entwickler, dass in der ActionBar "nur die Bildschirme, die in der Navigationsleiste dargestellt werden, das Bild der Navigationsleiste enthalten" und dass "alle anderen Bildschirme das herkömmliche Hochkarat haben".
Einzelheiten finden Sie hier:http://youtu.be/F5COhlbpIbY
Ich verwende eine Aktivität, um mehrere Ebenen von Fragmenten zu steuern, und kann das Navigationsschubladenbild auf allen Ebenen anzeigen und funktionieren lassen.
Beim Erstellen von Fragmenten niedrigerer Ebene kann ich die aufrufenActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
um das Bild der Navigationsleiste auszublenden und das Einfügemarke anzuzeigen
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag, "lowerFrag").addToBackStack(null).commit();
Das Problem, das ich habe, ist, wenn ich zurück zu den Fragmenten der obersten Ebene navigiere, die in der oberen Karat anstelle des ursprünglichen Navigationsschubladenbilds angezeigt werden. Haben Sie Vorschläge, wie Sie die ActionBar auf den Fragmenten der obersten Ebene "aktualisieren" können, um das Bild der Navigationsleiste wieder anzuzeigen?
LösungToms Vorschlag hat für mich funktioniert. Folgendes habe ich getan:
HauptaktivitätDiese Aktivität steuert alle Fragmente in der App.
Wenn ich neue Fragmente vorbereite, um andere zu ersetzen, setze ich DrawerTogglesetDrawerIndicatorEnabled(false)
so was:
LowerLevelFragment lowFrag = new LowerLevelFragment();
//disable the toggle menu and show up carat
theDrawerToggle.setDrawerIndicatorEnabled(false);
getSupportFragmentManager().beginTransaction().replace(R.id.frag_layout,
lowFrag).addToBackStack(null).commit();
Als nächstes in einer Außerkraftsetzung vononBackPressed
Ich habe das Obige zurückgesetzt, indem ich DrawerToggle auf gesetzt habesetDrawerIndicatorEnabled(true)
so was:
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
In den LowerLevelFragmentsIn den Fragmenten habe ich modifiziertonCreate
undonOptionsItemSelected
so was:
ImonCreate
hinzugefügtsetHasOptionsMenu(true)
um die Konfiguration des Optionsmenüs zu aktivieren. Auch eingestelltsetDisplayHomeAsUpEnabled(true)
um die< in der actionleiste:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// needed to indicate that the fragment would
// like to add items to the Options Menu
setHasOptionsMenu(true);
// update the actionbar to show the up carat/affordance
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
}
Dann inonOptionsItemSelected
wann immer die< gedrückt wird ruft es dieonBackPressed()
Gehen Sie von der Aktivität aus, um eine Ebene in der Hierarchie nach oben zu gelangen und das Bild der Navigationsleiste anzuzeigen:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
switch (item.getItemId()) {
case android.R.id.home:
//called when the up affordance/carat in actionbar is pressed
getActivity().onBackPressed();
return true;
…
}