"Bouton Retour" à l'aide de la barre d'outils getSupportActionbar et appcompat v7

J'utilise la nouvelle barre d'outils de la bibliothèque Appcompat V7 et je fais une application avec un tiroir de navigation et des fragments.

Dans certains fragments, je ne veux pas montrer l'icône de l'hamburger, mais la flèche à la place … C'est très bien, je l'ai fait de cette façon:

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); 

Ma question est la suivante: Comment ou quand je dois configurer le lisseur du bouton d'accueil ou ce que j'ai besoin d'écouter pour le bouton "Retour"? Je veux appeler la méthode principale contre la compression et rétablir l'icône du tiroir de navigation avec l'icône du hamburger.

6 Solutions collect form web for “"Bouton Retour" à l'aide de la barre d'outils getSupportActionbar et appcompat v7”

Vous pouvez le faire comme ceci:

 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 } 

Définissez onBackSTackChangedListener:

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

Réglez l'icône en fonction de l'arrière de votre fragment:

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

Détectez quand l'icône du tiroir est enfoncée:

 public boolean onOptionsItemSelected(MenuItem item) { if (drawerToggle.isDrawerIndicatorEnabled() && drawerToggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case x: return true; default: return false; } } 

Et utilisez le bouton haut:

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

Cela fonctionne pour moi. Bonne chance.

Ajoutez cette méthode dans onCreate() :

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

onOptionItemSelected() ensuite onOptionItemSelected() comme ci-dessous:

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

Je ne sais pas si cela fonctionne dans le cas de OP, mais dans de nombreux cas, c'est probablement l'option la plus simple pour implémenter le bouton Retour avec la barre d'outils AppCompat.

Ignorez toutes les setHomeButtonEnabled , setDisplayHomeAsUpEnabled et onOptionsItemSelected , et les problèmes connexes .

Au lieu de cela, lors de l'initialisation de la barre d'outils, définissez simplement 1) icône de navigation et 2) navigation OnClickListener pour elle:

 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(); } }); } 

1- Création de la mise en page de la Toolbar ;

 <?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- Incluez ceci dans votre mise en page à l'endroit où vous souhaitez que la toolbar d' toolbar soit.

3- Collez le code suivant dans votre activité. ( 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- modifiez l'icône de clic arrière pour ce que vous voulez.

Activez le bouton arrière:

 getActionBar().setDisplayHomeAsUpEnabled(enable); 

Et écoutez les clics sur onBackPressed()

Évidemment, votre activité doit étendre ActionBarActivity

Vous pouvez simplement configurer l'icône de navigation et assurez-vous de configurer setNavigationOnClickListener() après avoir configuré setSupportActionBar(toolbar)

 toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back)); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); 
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.