J'ai 10-15 activités dans mon projet. Je veux avoir le menu d'options principalement dans toutes les activités. Ensuite, il leur est possible de le faire à un endroit et cela apparaît dans toutes les activités.
Aussi, je voudrais cacher le menu d'option dans certains. Alors, est-ce possible ou je dois écrire le code de menu d'option dans toutes les activités.
Cordialement
Sunil
Créez une classe (par exemple BaseActivity ) qui étend l'activité et remplacez les fonctions onCreateOptionsMenu
et onOptionsItemSelected
.
public class BaseActivity extends Activity {
// Activity code here
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item:
// do what you want here
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
Maintenant, dans les 15-16 autres activités, au lieu d’étendre une activité, vous devriez étendre/ BaseActivity .
public class FooActivity extends BaseActivity {
// Activity code here
}
De cette façon, toutes vos activités dérivent du menu des options. Pour les activités pour lesquelles vous souhaitez désactiver le menu des options, vous pouvez le redéfinir dans cette activité.
public class BarActivity extends BaseActivity {
// Activity code here
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Do Nothing
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Do Nothing
}
}
Espérons que cela ne vous pose pas de problèmes dans le fichier manifeste.
La solution à ce problème consiste à ajouter cette méthode de menu à votre nouvelle activité.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_home_page, menu);
menu.removeItem(R.id.logout);
return true;
}
Dans chaque activité, cette méthode apparaîtra automatiquement.
Si ce n'est pas le cas, ajoutez-le avec l'appel inflate
. Il nécessite deux paramètres, une ressource XML (la même que celle utilisée dans votre activité d'origine) et l'objet de menu transmis à la méthode onCreateOptionsMenu
.
menu.removeItem
supprimera l'élément de menu de l'identifiant de ressource que vous lui transmettez. J'espère que cela aidera ceux qui font face à ce problème.
Merci et heureux de partager ce post.
Il ne suffit pas d'étendre la BaseActivity
, vous devez également appeler super.onCreateOptionsMenu(menu)
et super.onOptionsItemSelected(item)
comme ceci dans vos autres activités:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
//getMenuInflater().inflate(R.menu.menu_second, menu); <- remove this
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}