用片段内的新菜单替换 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);
}

别忘了您需要创建一个包含所需选项的新菜单文件