用片段内的新菜单替换 BottomAppBar 菜单
Replace BottomAppBar menu with new menu inside a fragment
我正在使用带有导航抽屉的底部应用栏。当我点击抽屉中的一项时,一个新片段会添加到我的 Main activity 之上。在这个片段中,我想要一个 RecyclerView。附加片段后,我想看到我在 MainActivity 上膨胀的普通菜单,但是当在回收器视图上单击某个项目时,我想用自定义菜单替换菜单。现在它只是将更多项目添加到现有菜单中。如何替换为新菜单,并使 Fab Button 消失或向右移动?
按钮只是为了模拟点击我以后的RecyclerCiew
public class CourseFragment extends Fragment {
private Menu mMenu;
private MenuInflater mInflater;
public CourseFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_course, container, false);
Button btn=view.findViewById(R.id.button);
btn.setOnClickListener(v->{
mInflater.inflate(R.menu.bottomappbar_edit_remove_menu,mMenu);mMenu.
});
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
mMenu=menu;
mInflater=inflater;
//inflater.inflate(R.menu.bottomappbar_main_menu,menu);
//super.onCreateOptionsMenu(menu,inflater);
}
}
在您的 RecyclerView 中,您需要实现一个 OnClickListener 来通知您的
带有所需菜单的片段,然后调用 invalidateOptionsMenu() 来
再次制作 onCreateOptionsMenu() 运行 并构建新菜单。
将您的示例与按钮一起使用,您的代码将如下所示
private int menuId = R.menu.bottomappbar_main_menu; // Your initial menu
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_course, container, false);
Button btn = view.findViewById(R.id.button);
btn.setOnClickListener(v -> {
this.menuId = R.menu.bottomappbar_another_menu; // another menu that you want to use
getActivity().invalidateOptionsMenu(); // notify that menu needs to be changed
});
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Inflate your menu
inflater.inflate(this.menuId, menu);
super.onCreateOptionsMenu(menu, inflater);
}
别忘了您需要创建一个包含所需选项的新菜单文件
我正在使用带有导航抽屉的底部应用栏。当我点击抽屉中的一项时,一个新片段会添加到我的 Main activity 之上。在这个片段中,我想要一个 RecyclerView。附加片段后,我想看到我在 MainActivity 上膨胀的普通菜单,但是当在回收器视图上单击某个项目时,我想用自定义菜单替换菜单。现在它只是将更多项目添加到现有菜单中。如何替换为新菜单,并使 Fab Button 消失或向右移动?
按钮只是为了模拟点击我以后的RecyclerCiew
public class CourseFragment extends Fragment {
private Menu mMenu;
private MenuInflater mInflater;
public CourseFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_course, container, false);
Button btn=view.findViewById(R.id.button);
btn.setOnClickListener(v->{
mInflater.inflate(R.menu.bottomappbar_edit_remove_menu,mMenu);mMenu.
});
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
mMenu=menu;
mInflater=inflater;
//inflater.inflate(R.menu.bottomappbar_main_menu,menu);
//super.onCreateOptionsMenu(menu,inflater);
}
}
在您的 RecyclerView 中,您需要实现一个 OnClickListener 来通知您的 带有所需菜单的片段,然后调用 invalidateOptionsMenu() 来 再次制作 onCreateOptionsMenu() 运行 并构建新菜单。
将您的示例与按钮一起使用,您的代码将如下所示
private int menuId = R.menu.bottomappbar_main_menu; // Your initial menu
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_course, container, false);
Button btn = view.findViewById(R.id.button);
btn.setOnClickListener(v -> {
this.menuId = R.menu.bottomappbar_another_menu; // another menu that you want to use
getActivity().invalidateOptionsMenu(); // notify that menu needs to be changed
});
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Inflate your menu
inflater.inflate(this.menuId, menu);
super.onCreateOptionsMenu(menu, inflater);
}
别忘了您需要创建一个包含所需选项的新菜单文件