2012-03-19 14 views
5

Sto cercando di implementare un menu di opzioni per la mia app e lo stesso menu viene utilizzato in diverse attività. Nel Android developers site, si dice quanto segue:Attuazione del menu di opzioni una volta per più attività

Suggerimento: se l'applicazione contiene molteplici attività e alcuni di loro fornire lo stesso menu opzioni, considerare la creazione di un'attività che implementa nulla se non l'onCreateOptionsMenu() e onOptionsItemSelected() metodi. Quindi estendi questa classe per ogni attività che dovrebbe condividere lo stesso menu di opzioni. In questo modo, è possibile gestire un set di codice per la gestione delle azioni di menu e ogni classe discendente eredita i comportamenti del menu. Se si desidera aggiungere voci di menu a una delle attività discendenti, eseguire l'override di onCreateOptionsMenu() in tale attività. Chiama super.onCreateOptionsMenu (menu) in modo che vengano create le voci di menu originali , quindi aggiungi nuove voci di menu con menu.add(). L'utente può anche ignorare il comportamento della super-classe per i singoli elementi del menu .

Le mie attività si estendono da Activity, ListActivity o MapActivity, quindi quale sarebbe il modo corretto di implementare ciò che stanno suggerendo qui? È possibile? Poiché non posso estendere questa nuova classe per tutti questi, potrei fare solo qualcosa di simile al BaseMenu astratto pubblico estende Attività (come spiegato in this question) ma questo non funziona per me. Quindi mi chiedo se c'è un lavoro che posso implementare.

Grazie in anticipo

+0

+1 per la tua bella domanda. –

risposta

2

Per questo comune classe di menu di base è necessario estendere classe MapActivity. Quindi puoi estendere quella classe di menu di base comune per tutte le attività.

Per tale ListActivity è anche possibile implementare l'elenco senza ListActivity, è possibile implementarlo solo con Activity o MapActivity.

devi dichiararti listview in file xml con l'id come sotto.

<ListView 
      android:id="@+id/listView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

Quindi devi dichiararlo nella classe di attività.

ListView listView = (ListView)findViewById(R.id.listView); 
listView.setAdapter(your adapter); 

Come sopra è possibile implementarlo senza estendere ListActivity.

+0

È un buon modo di utilizzare MapActivity anziché Activity se non è richiesto Map in alcune attività. Penso che consumi più memoria. –

+1

Come so che la mappa non è implementata senza attività della mappa, quindi per l'opzione di menu di base comune questo è il modo adatto. –

1

non è possibile utilizzare mapview senza estendere classe mapactivity .... riferimento questo .. MapView without MapActivity ..quindi si dovrebbe lasciare la vostra classe di base si estendono mappa di attività ... e per l'attività utilizzando ListView .. messo listview in XML e si può essere utilizzato nella vostra attività ..

0

vorrei creare una classe statica MenuProvider che implementa il vostro onCreateOptionsMenu() e onOptionItemsSelected() metodi staticamente ad essere chiamato da onCreateOptionsMenu() e onOptionsItemsSelected() delle attività, in questo modo:

public static class MenuProvider { 

    // You can pass it the activity and other variables used by this method if 
    // you need to. 
    // Since the implementation is the same across all activities, they should 
    // pass the same variables. 
    public static void onCreateOptionsMenu(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on create 
    } 

    public static void onOptionItemsSelected(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on item select 
    } 
} 

E in ciascuna delle vostre attività es, si farebbe:

public class MyMapActivity extends MapActivity { 
    ... 

    public void onCreateOptionsMenu(MenuItem item) 
     MenuProvider.onCreateOptionsMenu(item, this, ... /*other variables */); 
    } 

    public static void onOptionItemsSelected(MenuItem item) 
     MenuProvider.onOptionItemsSelected(item, this, ... /*other variables */); 
    } 

    ... 
} 
+0

Grazie, non so perché non ci ho pensato prima :) Forse non è elegante come le altre implementazioni suggerite, ma penso che sia più facile e meno disordinato visto che non ho programmato in Android tanto. – marimaf

+0

Le implementazioni per onCreateOptionMenu e onOptionItemsSelected implementano alcune cose come ad esempio Intenti. Ho esteso MenuProvider da Activity ma poi mi ha lanciato un errore per il modificatore statico su quei metodi. – marimaf

Problemi correlati