web-dev-qa-db-fra.com

Même option dans toutes les activités sous Android

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

31
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.

61
st0le

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. 

3
Madhvi Mamtora

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);
}
1
ojonugwa ochalifu