2010-07-17 8 views
28

J'ai 10-15 activités dans mon projet. Je veux avoir le menu d'option surtout dans toutes les activités. Alors est leur n'importe quelle façon nous pouvons le faire à un endroit et il apparaît dans toutes les activités.Même menu d'options dans toutes les activités dans Android

Aussi, je voudrais cacher le menu d'option dans certains. Donc, est-ce possible ou je dois écrire le code du menu option dans toutes les activités.

Cordialement

Sunil

Répondre

50

Créer une classe (par exemple BaseActivity) qui étend l'activité, et passer outre onCreateOptionsMenu et onOptionsItemSelected fonctions.

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 autres activités 15-16, au lieu d'étendre une activité, vous devez é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é particulière.

public class BarActivity extends BaseActivity { 

    // Activity code here 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Do Nothing 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Do Nothing 
    } 
} 

Heureusement, cela ne vous pose aucun problème dans le fichier manifeste.

+0

Même je pensais à cela, mais j'ai déjà un customactivity pour régler la barre de titre dans toutes les activités. J'essaierai de l'implémenter dans ce domaine. – sunil

+0

oui, s'il vous plaît faire, cela devrait fonctionner. Indiquez également vos résultats. :) – st0le

+0

Est-ce que ça marche finalement? Personne n'a signalé les résultats: c –

3

La solution à ce problème est dans votre nouvelle activité ajoutez cette méthode de menu.

@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 requiert deux paramètres, une ressource xml (la même que celle que vous avez utilisée dans votre activité d'origine) et l'objet de menu qui est transmis à la méthode onCreateOptionsMenu.

menu.removeItem va supprimer l'élément de menu de l'identifiant de ressource que vous lui passez. J'espère que cela aide ceux qui sont confrontés à ce problème.

Merci, et heureux de partager ce poste.

1

Il ne suffit pas d'étendre juste le BaseActivity, vous devez également appeler super.onCreateOptionsMenu(menu) et super.onOptionsItemSelected(item) comme 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); 
} 
+0

getMenuInflater(). Gonfle (R.menu.menu_second, menu); // <- Vous devriez enlever ceci –

+0

Cela fait disparaître l'option Menu ...? –

Questions connexes