web-dev-qa-db-fra.com

Comment ajouter un bouton dans ActionBar (Android)?

Je souhaite ajouter un bouton à la barre d'actions à droite de l'exemple, comme dans cette capture d'écran: 

a screenshot of an actionbar with no buttons. the title is 'Example'

Je reçois actionBar dans la méthode onCreate en tant que:

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

et le bouton retour (méthode onOptionsItemSelected) comme ci-dessous: 

public boolean onOptionsItemSelected(MenuItem item){
    Intent myIntent = new Intent(getApplicationContext(),MainActivity.class);
    startActivityForResult(myIntent, 0);
    return true;
}

Comment puis-je ajouter un bouton?

26
Ponting

vous devez créer une entrée dans res/menu,override onCreateOptionsMenu et la gonfler

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.yourentry, menu);
    return true;
}

une entrée pour le menu pourrait être:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
    <item
        Android:id="@+id/action_cart"
        Android:icon="@drawable/cart"
        Android:orderInCategory="100"
        Android:showAsAction="always"/> 
</menu>
76
Blackbelt

Une activité remplit la barre d’action dans sa méthode onCreateOptionsMenu().

Au lieu d'utiliser setcustomview(), substituez simplement onCreateOptionsMenu comme ceci: 

@Override    
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mainmenu, menu);
  return true;
}

Si une action dans la barre d'actions est sélectionnée, la méthode onOptionsItemSelected() est appelée. Il reçoit l'action sélectionnée en paramètre. En fonction de ces informations, votre code peut décider quoi faire, par exemple:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    case R.id.menuitem1:
      Toast.makeText(this, "Menu Item 1 selected", Toast.LENGTH_SHORT).show();
      break;
    case R.id.menuitem2:
      Toast.makeText(this, "Menu item 2 selected", Toast.LENGTH_SHORT).show();
      break;
  }
  return true;
}
16
Google

Merci à @Blackbelt! La nouvelle signature de méthode pour gonfler le menu est la suivante:

@Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.my_meny, menu);
}
0
Ivo Stoyanov