web-dev-qa-db-de.com

"Zurück" -Schaltfläche mit der getSupportActionbar und der Appcompat v7-Symbolleiste

Ich verwende die neue Symbolleiste aus der Appcompat V7-Bibliothek und erstelle eine Anwendung mit einer Navigationsleiste und mit Fragmenten.

In einigen Fragmenten möchte ich nicht das Hamburger-Symbol zeigen, sondern stattdessen den Pfeil ... Das ist gut, ich habe das auf folgende Weise gemacht:

mDrawerToggle.setDrawerIndicatorEnabled(false);

mDrawerToggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);

getSupportActionBar().setHomeAsUpIndicator(R.drawable.abc_ic_ab_back_mtrl_am_alpha);

Meine Frage ist die: Wie oder wo muss ich den Startknopf lisener einrichten oder was muss ich für die "Zurück" -Taste hören? Ich möchte die Backpressed-Hauptmethode aufrufen und das Navigationssymbol mit dem Hamburger-Symbol zurücksetzen.

50
András Ferencz

Sie können es so machen:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    toolbar = (Toolbar)findViewById(R.id.toolbar);
    if (toolbar != null) {
      setSupportActionBar(toolbar);
      getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    setUpNavigationDrawer();

    getFragmentManager().addOnBackStackChangedListener(backStackListener); // listen to the backstack of the fragment manager
}

Definieren Sie den onBackSTackChangedListener:

private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
   @Override
   public void onBackStackChanged() {
       setNavIcon();
   };
}

Setze das Symbol entsprechend dem Backstack deines Fragments:

protected void setNavIcon() {
    int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
    drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}

Erkennen, wenn das Schubladensymbol gedrückt wird:

public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    switch (item.getItemId()) {
      case x:
         return true;
      default:
         return false;
    }
}

Und die Aufwärtstaste betätigen:

public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}

Das funktioniert für mich. Viel Glück.

41
tanneebee

Fügen Sie diese Methode in onCreate() hinzu:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

Dann überschreiben Sie die onOptionItemSelected() wie folgt:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case Android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
70
Raja Jawahar

Nicht sicher, ob dies im Fall von OP funktioniert, aber in vielen Fällen ist dies wahrscheinlich die einfachste Möglichkeit, die Schaltfläche Zurück mit der AppCompat Toolbar zu implementieren.

Überspringen Sie alle setHomeButtonEnabled-, setDisplayHomeAsUpEnabled- und onOptionsItemSelected-Sachen und verwandte Probleme

Setzen Sie stattdessen beim Initialisieren der Toolbar einfach 1) Navigationssymbol und 2) OnClickListener Navigation dafür:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

if (enableBackNavigation) {
    toolbar.setNavigationIcon(R.drawable.ic_back);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
}
31
Jonik

1- Toolbar-Layout erstellen;

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:local="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/dark_blue"
    Android:minHeight="?attr/actionBarSize"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

2- Fügen Sie dies in Ihrem Layout an der Stelle ein, an der die toolbar sein soll.

3- Fügen Sie den folgenden Code in Ihre Aktivität ein (erweitert ActionBarActivity)

private Toolbar mToolbar;

//For Toolbar (Action bar) start
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        mToolbar.setNavigationIcon(R.drawable.ic_back_arrow);
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });
        getSupportActionBar().setTitle("Event Details");
        //For Toolbar (Action bar) end

4- Ändern Sie das Zurückklick-Symbol in Ihren Wünschen.

16
Surendar D

aktiviere die Zurück-Taste:

getActionBar().setDisplayHomeAsUpEnabled(enable);

und auf Klicks in onBackPressed() achten

Ihre Aktivität muss natürlich ActionBarActivity erweitert werden.

3
TheRedFox

Sie können einfach das Navigationssymbol einstellen und sicherstellen, dass Sie setNavigationOnClickListener() einstellen, nachdem Sie setSupportActionBar(toolbar) eingestellt haben.

toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back));
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});
2
Fenil

fügen Sie im Manifest diese Zeilen unter der Aktivität hinzu, mit der der hintere Pfeil funktionieren soll 

Android: parentActivityName = "Name der übergeordneten Aktivität"

1
murtaza agaz

SetDisplayHomeAsUpEnabled hinzufügen (true)

    Toolbar toolbar  = findViewById(R.id.toolbar);
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setDisplayHomeAsUpEnabled(true);
    }

Halten Sie die Rücktaste gedrückt

   public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
0
Farid Haq