Ich weiß, es gibt eine Menge Fragen wie diese beantwortet, aber nichts, was ich fand funktioniert.Android Toolbar Navigation zurück Schaltfläche Rückruf nie genannt
Ich habe eine Aktivität (MainActivity
), die sich darum kümmert, verschiedene Fragmente anzuzeigen. Auch in der Aktivität habe ich Navigationsschublade, die ich nur auf einem Fragment zeige (es ist auf anderen versteckt).
Das Problem ist, dass Callback der Symbolleiste Navigation nie aufgerufen wird. Zurück-Taste wird angezeigt, aber klicken Sie darauf, tut nichts. Auch (ich weiß nicht, ob es irgendeinen Unterschied macht), aber der Benutzer kommt zu dem Fragment von einem anderen, in dem ich die gleichen Dinge mache wie in diesem, außer die Navigation zurück-Taste ist ausgeblendet.
XML für die Aktivität ist dies:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include
android:id="@+id/main_toolbar"
layout="@layout/toolbar"/>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/activity_main_drawer"/>
</android.support.v4.widget.DrawerLayout>
inklusive Symbolleiste:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"/>
nun eine Symbolleiste in Aktivität I Setup und legte einen Hörer auf seiner Rückseite Taste:
setSupportActionBar(mainToolbar);
setTitle(getResources().getString("Some title"));
mainToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
In diesem spezifischen Fragment, wo ich zurück Knopf brauche, mache ich das, um es zu zeigen:
if (this.context.getSupportActionBar() != null) {
this.context.getSupportActionBar().setTitle("Fragment title"));
this.context.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
this.context.getSupportActionBar().setDisplayShowHomeEnabled(true);
}
Und da ich verwendet werden, nicht Navigation Schublade wollen/zeigte, in dem Fragment ich eine Methode in der Tätigkeit definiert aufrufen, die diesen Code ausführt:
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
drawerToggle.setDrawerIndicatorEnabled(false);
Ich füge dieses Fragment zum backstack bereits hinzu. Warum sollte ich das gleiche zweimal machen? Zuerst in 'onCreate' und dann in' onBackStackChanged'? Und jedes Mal, wenn Backstack Änderungen –
Ops ich geschrieben, ist zweimal. Sie können diesen Code nur in BackStackChange Listener –
einfügen, wenn Sie 2 Fragment haben und die Schaltfläche aktivieren möchten, wenn das zweite Fragment angezeigt wird. Dann können Sie überprüfen, ob ein Objekt des zweiten Fragments vorhanden ist, und es dann zum Backstack hinzufügen –