2011-06-11 3 views
1

Je suis en train d'apprendre à créer des menus d'options pour les applications Android.Menus d'options DRY sur Android

Dans le guide il a la pointe suivante pour rester au sec avec des menus:

Astuce: Si votre application contient multiples activités et certains d'entre eux fournissent le même menu Options, envisager la création d'une activité implémente rien sauf les méthodes onCreateOptionsMenu() et onOptionsItemSelected(). Puis étendre cette classe pour chaque activité qui devrait partager le même menu Options . De cette façon, vous devez gérer un seul jeu de code pour gérer les actions du menu et chaque classe descendante hérite des comportements du menu.

Cela semble problématique. Si les Activity qui ont besoin de partager les mêmes options héritent de classes différentes, à quoi mon OptionsMenuActivity doit-il hériter? J'ai lu que Java ne supporte pas l'héritage multiple, alors comment vous débrouillez-vous?

Répondre

3

Votre activité qui a le code pour le menu d'options doit étendre la classe d'activité.

public class YourRootActivity extends Activity { 

// Any other stuff that you want for all activities 

public boolean onCreateOptionsMenu(Menu menu){ 
// your main options menu 
} 
} 

Maintenant, pour les classes qui ont besoin de ce menu, faites-leur étendre l'activité que nous avons créée ci-dessus.

class Activity1 extends YourRootActivity { 
} 

Si vous voulez de légères modifications dans votre menu d'options dans les sous-classes, vous pouvez remplacer la méthode onCreateOptionsMenu dans ces classes.

+0

Je comprends cette approche. Mais que faire si Activity1 étend Activity et Activity2 extends une autre classe? – user94154

+0

L'activité 2 ne peut pas étendre une autre classe. Si vous définissez une sous-classe d'activité, vous devez étendre Activity ou une sous-classe d'activité. La réponse d'Achie est bonne –

+0

C'est un inconvénient de Java qui peut être contourné dans la plupart des cas en implémentant soigneusement des classes et en utilisant des interfaces pour implémenter de tels cas. Mais dans notre cas, puisque nous ne voulons pas écrire toute la classe d'activité d'Android, c'est un compromis que nous devons faire. Dans le cas ci-dessus, il se peut que nous devions étendre TabActivity ou MapsActivity. Dans ceux-ci et tous les autres cas similaires, nous devrons implémenter le code du menu des options dans les activités respectives. – achie