2010-07-17 12 views
28

Ho 10-15 attività nel mio progetto. Voglio avere il menu delle opzioni principalmente in tutte le attività. Quindi è il loro modo in cui possiamo farlo in un posto e appare in tutte le attività.Lo stesso menu di opzioni in tutte le attività in Android

Inoltre, mi piacerebbe nascondere il menu delle opzioni in alcuni. Quindi, è possibile o devo scrivere il codice del menu delle opzioni in tutte le attività.

saluti

Sunil

risposta

50

Creare una classe (diciamo BaseActivity) che si estende attività, e ignorare onCreateOptionsMenu e onOptionsItemSelected funzioni.

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); 
     } 
    } 
} 

Ora, nelle altre attività 15-16, invece di estendere un attività, si dovrebbe estendere BaseActivity.

public class FooActivity extends BaseActivity { 

    // Activity code here 

} 

In questo modo, tutte le attività derivano dal menu delle opzioni. Per le attività in cui si desidera disattivare il menu opzioni, è possibile sovrascriverlo in quella particolare attività.

public class BarActivity extends BaseActivity { 

    // Activity code here 

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

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

Speriamo che non ci siano problemi nel file manifest.

+0

Anche Ci ho pensato ma ho già un customactivity per l'impostazione della barra del titolo in tutte le attività. Cercherò di implementarlo in quello stesso. – sunil

+0

sì, per favore, dovrebbe funzionare. Segnala anche i tuoi risultati. :) – st0le

+0

Alla fine funziona? Nessuno ha riportato risultati: c –

3

La soluzione a questo problema è nella tua nuova attività aggiungi questo metodo di menu.

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_home_page, menu); 
    menu.removeItem(R.id.logout); 
    return true; 
} 

In ogni attività questo metodo verrà visualizzato automaticamente.

In caso contrario, aggiungerlo alla chiamata inflate. Richiede due parametri, una risorsa xml (la stessa utilizzata nell'attività originale) e l'oggetto menu che passa nel metodo onCreateOptionsMenu.

menu.removeItem rimuoverà la voce di menu di qualsiasi ID risorsa passata. Spero che questo aiuti coloro che stanno affrontando questo problema.

Grazie e felice di condividere questo post.

1

Non è sufficiente per estendere solo il BaseActivity, è necessario chiamare super.onCreateOptionsMenu(menu) e super.onOptionsItemSelected(item) come questo nelle altre attività:

@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(). Gonfia (R.menu.menu_second, menu); // <- Dovresti rimuovere questo –

+0

Questo fa scomparire l'opzione Menu ...? –

Problemi correlati