2015-10-06 12 views
6
Android Studio 1.4 

Ho una barra degli strumenti che gonfio nel mio activity_main.xml. Ho un menu chiamato main.xml che viene gonfiato con solo 1 icona da visualizzare su di esso.Mostra diverse opzioni di menu sulla barra degli strumenti per attività e frammento

Quando l'utente fa clic per aprire un frammento. Ho un altro menu friends.xml che ha 2 icone.

Quando si gonfia il menu degli amici nel frammento visualizza ancora l'icona dal menu main.xml.

Ho pensato che il gonfiaggio di un nuovo menu sulla barra degli strumenti avrebbe rimosso il menu esistente.

Questa è una schermata del menu main.xml. Viene visualizzata l'icona di ricerca enter image description here

Questa è la schermata del frammento come si può vedere l'icona trova è ancora lì.

enter image description here activity_main.xml con barra degli strumenti inclusi

<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/white" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/tbMain" 
      layout="@layout/app_bar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 

     <FrameLayout 
      android:id="@+id/content_frame" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clickable="true"/> 
    </LinearLayout> 
</android.support.v4.widget.DrawerLayout> 

Ecco il mio codice per creare il menu in MainActivity.java

private void setupToolBar() { 
     mToolbar = (Toolbar)findViewById(R.id.tbMain); 
     setSupportActionBar(mToolbar); 

     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     return super.onOptionsItemSelected(item); 
    } 

E nel mio frammento ho questo, come si può vedere io sono gonfiando il menu friends.xml.

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     super.onCreateOptionsMenu(menu, inflater); 
     inflater.inflate(R.menu.friends, menu); 
    } 

Molte grazie per qualsiasi suggerimento,

+0

"Ho pensato che gonfiare un nuovo menu nella barra degli strumenti eliminerebbe il menu esistente" questo non è valido, totale Voci del menu = MenuItemsOfActivity + MenuItemsOfFragment – QAMAR

+0

basta spostare ' @Override booleano pubblico suCreateOptionsMenu (Menu menu) { getMenuInflater(). Gonfia (R.menu.main, menu); return super.onCreateOptionsMenu (menu); } all'interno di FirstFragment e fai setHasOptionsMenu (true) all'interno di onFragment's onCreate() .. Questo dovrebbe funzionare – Droidwala

+0

Non c'è bisogno di gonfiare il menu all'interno dell'attività .. basta farlo frammentare saggia – Droidwala

risposta

11

non sono sicuro se si può fare questo con onCreateOptionsMenu(). Penso che la tua scommessa migliore sarà onPrepareOptionsMenu().

È possibile forzare Android ad aggiornare il menu delle opzioni semplicemente scrivendo getActivity().invalidateOptionsMenu() in Fragment's onResume().

Così il vostro onPrepareOptionsMenu() sarà simile:

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    menu.clear(); //remove all items 
    getActivity().getMenuInflater().inflate(R.menu.menu_fragment, menu); 
} 
+0

Questo è stato il modo in cui ho risolto come sembra essere molto pulito. Ha funzionato come un fascino. Grazie. – ant2009

3

Conservare il riferimento menu in una variabile.

private Menu menu; 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.main, menu); 
      this.menu = menu; 
      return super.onCreateOptionsMenu(menu); 
     } 

Quando si sostituisce al frammento indicato, attenersi alla seguente procedura.

private void hideOption(int id) { 
     menu.findItem(id).setVisible(false); 
    } 

Chiama hideOption() con id menu. per es,

hideOption(R.id.action_search); 

e viceversa per showing.or seguire il suggerimento di #Droidwala

Problemi correlati