Заменить меню BottomAppBar новым меню внутри фрагмента - PullRequest
0 голосов
/ 22 июня 2019

Я использую нижнюю панель приложения с навигационным ящиком. Когда я нажимаю на один элемент в ящике, новый фрагмент добавляется поверх моей основной деятельности. Внутри этого фрагмента я хочу иметь RecyclerView. Когда фрагмент прикреплен, я хочу видеть обычное меню, которое я надуваю в MainActivity, но когда щелкаю по элементу в представлении переработчика, я хочу заменить меню на пользовательское. Прямо сейчас это просто добавление дополнительных пунктов в существующее меню. Как я могу заменить новое меню и заставить Fab Button исчезнуть или переместиться вправо?

enter image description here

Кнопка просто для имитации нажатия на мой будущий 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);
}
}

1 Ответ

1 голос
/ 22 июня 2019

В вашем 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);
}

Не забывайте, что вам нужно будет создать новый файл меню с нужными вам опциями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...