2015-10-06 101 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

相关问题