在 activity 和片段的工具栏上显示不同的菜单选项
Show different menu options on Toolbar for activity and fragment
Android Studio 1.4
我在 activity_main.xml
中有一个工具栏。
我有一个名为 main.xml
的菜单,它会膨胀,上面只有 1 个图标。
当用户点击打开片段时。我有另一个菜单 friends.xml
,它有 2 个图标。
当我在片段中扩充好友菜单时,它仍然显示 main.xml
菜单中的图标。
我认为在工具栏上展开新菜单会删除现有菜单。
这是 main.xml 菜单的屏幕截图。显示查找图标
这是片段的屏幕截图,您可以看到查找图标仍然存在。
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);
}
在我的片段中有这个,正如你所看到的,我正在膨胀 friends.xml 菜单。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.friends, menu);
}
非常感谢您的任何建议,
将 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);
}
使用菜单 ID 调用 hideOption()
。例如,
hideOption(R.id.action_search);
反之亦然 showing.or 遵循 #Droidwala
的建议
我不确定你是否可以用 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);
}
Android Studio 1.4
我在 activity_main.xml
中有一个工具栏。
我有一个名为 main.xml
的菜单,它会膨胀,上面只有 1 个图标。
当用户点击打开片段时。我有另一个菜单 friends.xml
,它有 2 个图标。
当我在片段中扩充好友菜单时,它仍然显示 main.xml
菜单中的图标。
我认为在工具栏上展开新菜单会删除现有菜单。
这是 main.xml 菜单的屏幕截图。显示查找图标
这是片段的屏幕截图,您可以看到查找图标仍然存在。
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);
}
在我的片段中有这个,正如你所看到的,我正在膨胀 friends.xml 菜单。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.friends, menu);
}
非常感谢您的任何建议,
将 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);
}
使用菜单 ID 调用 hideOption()
。例如,
hideOption(R.id.action_search);
反之亦然 showing.or 遵循 #Droidwala
的建议我不确定你是否可以用 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);
}