J'utilise la nouvelle barre d'outils de la bibliothèque Appcompat V7 et je crée une application avec un tiroir de navigation et des fragments.
Dans certains fragments, je ne veux pas montrer l’icône de 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 où dois-je configurer le bouton d'accueil Lisener ou que dois-je écouter pour le bouton "Précédent"? Je souhaite appeler la méthode principale principale et appuyer sur l'icône du tiroir de navigation avec l'icône de hamburger.
Vous pouvez le faire comme ça:
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 le onBackSTackChangedListener:
private FragmentManager.OnBackStackChangedListener backStackListener = new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
setNavIcon();
};
}
Définissez l'icône en fonction du backstack de votre fragment:
protected void setNavIcon() {
int backStackEntryCount = getFragmentManager().getBackStackEntryCount();
drawerToggle.setDrawerIndicatorEnabled(backStackEntryCount == 0);
}
Détecter lorsque 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 manipulez le bouton haut:
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
Cela fonctionne pour moi. Bonne chance.
Ajoutez cette méthode dans onCreate()
:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Puis substituez le 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);
}
}
Pas sûr que cela fonctionne dans le cas d'OP, mais dans de nombreux cas, c'est probablement l'option la plus simple pour implémenter le bouton Précédent avec la barre d'outils AppCompat.
Ignorez tous les éléments setHomeButtonEnabled
, setDisplayHomeAsUpEnabled
et onOptionsItemSelected
et liés .
Au lieu de cela, lors de l’initialisation de la barre d’outils, définissez simplement 1) l’icône de navigation et 2) la navigation pour OnClickListener:
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éer une mise en page 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 voulez que la toolbar
soit.
3- Collez le code suivant dans votre activité. (Étend 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- Changez l’icône de clic arrière sur ce que vous voulez.
activer le bouton retour:
getActionBar().setDisplayHomeAsUpEnabled(enable);
et écoutez les clics dans onBackPressed()
De toute évidence, votre activité doit s'étendre ActionBarActivity
Vous pouvez simplement configurer l’icône de navigation et vous assurer que vous définissez 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();
}
});
dans manifeste ajouter ces lignes sous l'activité que vous voulez la flèche arrière de travail
Android: parentActivityName = "Le nom de votre activité parent"
Ajouter setDisplayHomeAsUpEnabled (true)
Toolbar toolbar = findViewById(R.id.toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
Manipuler le bouton de retour
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}