2015-10-06 61 views
6
Android Studio 1.4 

我有一個工具欄,在我的activity_main.xml中充氣。 我有一個名爲main.xml的菜單,它只能顯示1個圖標。在工具欄上顯示活動和片段的不同菜單選項

當用戶點擊打開一個片段。我有另一個菜單friends.xml有2個圖標。

當我膨脹片段中的朋友菜單時,它仍然顯示main.xml菜單中的圖標。

我認爲在工具欄上添加新的菜單會刪除現有的菜單。

這是main.xml菜單的屏幕截圖。查找圖標顯示 enter image description here

這是片段的截圖,因爲您可以看到find圖標仍然存在。

enter image description here activity_main.xml與工具欄包括

<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> 

這是我在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); 
    } 

創建菜單而在我的片段我都這樣了,你可以看到我的代碼inflate friends.xml菜單。

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

非常感謝您的任何建議,

+0

「我認爲,在工具欄上膨脹的新菜單將刪除現有的菜單」這是無效的,總的菜單項= MenuItemsOfActivity + MenuItemsOfFragment – QAMAR

+0

只是移動' @Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater()。inflate(R.menu.main,menu); 超級回報。onCreateOptionsMenu(菜單); }在FirstFragment內部並在FirstFragment的onCreate()內部設置setHasOptionsMenu(true)..這應該起作用 – Droidwala

+0

沒有必要在活動內部充氣菜單..只是做它片段明智的 – Droidwala

回答

11

的showing.or後續建議,反之亦然我不知道你是否能onCreateOptionsMenu()做到這一點。我認爲你更好的選擇將是onPrepareOptionsMenu()

只需在Fragment的onResume()中寫入getActivity().invalidateOptionsMenu()即可強制Android刷新選項菜單。

所以你onPrepareOptionsMenu()會像:

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

這是我解決它的方式,因爲它似乎是很乾淨。像魅力一樣工作。謝謝。 – ant2009

3

存儲在一個變量的menu參考。

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

當替換爲提到的片段時,請執行以下操作。

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

撥打菜單編號hideOption()。爲前,

hideOption(R.id.action_search); 

而對於#Droidwala

相關問題