Bei Verwendung der Navigationsleiste empfehlen die Android-Entwickler, dass in der Aktionsleiste "nur die Bildschirme, die in der Navigationsleiste dargestellt werden, tatsächlich das Bild der Navigationsleiste haben sollten" und dass "alle anderen Bildschirme das traditionelle Up-Carat-Format haben".
Einzelheiten finden Sie hier: http://youtu.be/F5COhlbpIbY
Ich verwende eine Aktivität, um mehrere Ebenen von Fragmenten zu steuern, und kann das Bild der Navigationsschublade auf allen Ebenen anzeigen und funktionieren lassen.
Beim Erstellen von Fragmenten niedrigerer Ebenen kann ich das aufrufen ActionBarDrawerToggle
setDrawerIndicatorEnabled(false)
, um das Bild der Navigationsschublade auszublenden und das Caret Up 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 das Up-Karat anstelle des ursprünglichen Navigationsschubladenbilds weiterhin anzeigt. Irgendwelche Vorschläge, wie Sie die ActionBar auf den Fragmenten der obersten Ebene "aktualisieren" können, um das Bild der Navigationsleiste wieder anzuzeigen?
Lösung
Toms Vorschlag hat bei mir funktioniert. Folgendes habe ich getan:
Hauptaktivität
Diese Aktivität steuert alle Fragmente in der App.
Wenn ich neue Fragmente vorbereite, um andere zu ersetzen, stelle ich den DrawerToggle folgendermaßen ein setDrawerIndicatorEnabled(false)
:
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 habe onBackPressed
ich in einem Override von das oben Gesagte rückgängig gemacht, indem ich DrawerToggle so eingestellt habe, dass es setDrawerIndicatorEnabled(true)
wie folgt aussieht :
@Override
public void onBackPressed() {
super.onBackPressed();
// turn on the Navigation Drawer image;
// this is called in the LowerLevelFragments
setDrawerIndicatorEnabled(true)
}
In den LowerLevelFragments
In den Fragmenten habe ich modifiziert onCreate
und onOptionsItemSelected
mag das:
Wird onCreate
hinzugefügt setHasOptionsMenu(true)
, um die Konfiguration des Optionsmenüs zu aktivieren. Auch setzen setDisplayHomeAsUpEnabled(true)
die aktivieren < in der Aktionsleiste :
@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 , onOptionsItemSelected
wenn die < gedrückt wird es ruft die onBackPressed()
von der Aktivität einer Ebene in der Hierarchie nach oben und in der Navigationsleiste Bild 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;
…
}
.replace(R.id.frag_layout
. Wenn dies eine weitere Hierarchieebene ist, würde ich erwarten, dass Sie .add
es in den Backstack.
theDrawerToggle.setDrawerIndicatorEnabled(false);
Innere des Fragments? Ich denke, es ist in der Hauptaktivitätsklassendatei deklariert. Ich kann keinen Weg finden, darauf zu verweisen. Irgendwelche Hinweise?
setDisplayOptions()
Methode im ToolbarWidgetWrapper
(des internen Pakets android.support.v7.internal.widget) das Symbol nicht neu erstellen, wenn dasselbe Fragment ein zweites Mal eingegeben wird. Lassen Sie dies einfach hier, wenn andere ebenfalls auf dieses Problem stoßen.