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ösung

Toms Vorschlag hat für mich 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, 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 vononBackPressedIch 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 LowerLevelFragments

In 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;
        … 
    }

Antworten auf die Frage(12)

Ihre Antwort auf die Frage