Подтвердить что ты не робот

Панель инструментов Android Добавление элементов меню для разных фрагментов

У меня есть панель инструментов, а также навигационный ящик. Когда я запускаю свое приложение, панель инструментов и панель навигации создаются. Когда я щелкаю элементы в блоке навигации, он запускает новые фрагменты и сохраняет ту же панель инструментов. Как мне добавить пункты меню на панель инструментов, такие как поиск, добавление, редактирование, когда я запускаю определенные фрагменты? Я не хочу их в начале программы, но создается динамически. Кроме того, как я смогу нажать на эти кнопки и заставить их запускать другие фрагменты. Я хочу, чтобы в одном фрагменте кнопка редактирования на панели инструментов выполняла определенную функцию по сравнению с кнопкой редактирования в другом фрагменте. Спасибо!

Menu_toolbar:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/edit"
    android:orderInCategory="1"
    android:title="Edit"
    app:showAsAction="always"
    android:icon="@drawable/pencil_icon"/>
<item android:id="@+id/add"
    android:orderInCategory="1"
    android:title="Add"
    app:showAsAction="always"
    android:icon="@drawable/plus_icon"/>

Панель инструментов:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="#10a1ff"
android:title="Home"
/>
4b9b3361

Ответ 1

Добавьте похожий код к своим фрагментам:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
    View v = inflater.inflate(R.layout.library_fragment, parent, false);
    setHasOptionsMenu(true);
    return v;
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
   inflater.inflate(R.menu.your_menu_xml, menu);
   super.onCreateOptionsMenu(menu, inflater);
}

Таким образом, вы можете настроить меню для ваших фрагментов.

Ответ 2

Вот как создать меню динамически: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html

Отредактировано:

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);
actionBarToolBar.setNavigationIcon(R.drawable.icon);
actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc);
actionBarToolBar.setLogo(R.drawable.other_icon);
actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc);
actionBarToolBar.inflateMenu(R.menu.fragment_menu);

Ответ 3

Лучший способ сделать это:

1. Найдите панель инструментов в действии и установите ее как supportActionBar.

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);

2. Тогда это будет кусок пирога, чтобы обрабатывать меню опций для разных фрагментов над одной и той же Деятельностью. Делайте следующие вещи в каждом фрагменте, как хотите:

В вызове метода OnCreateView

setHasOptionsMenu(true);

И наконец,

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

И для управления пунктами меню нажмите, у нас есть onOptionsItemSelected:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_search :
            Log.i("item id ", item.getItemId() + "");
        default:
            return super.onOptionsItemSelected(item);
    }
}

Ответ 4

Переопределите метод onCreateOptionsMenu в каждом фрагменте.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.your_menu_xml, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

Ответ 5

Я правильно решил эти проблемы. Мое решение выглядит следующим образом:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    mRootView = inflater.inflate(R.layout.fragment_order_history, container, false);
    //getActivity().invalidateOptionsMenu();


    setHasOptionsMenu(true);

    return mRootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

Ответ 6

У меня была такая же проблема, и я хотел заменить меню панели инструментов соответствующим образом отображаемому фрагменту.

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что меню добавлено к предыдущему.

Чтобы отобразить только меню для фрагмента, я предлагаю:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     menu.clear(); //Empty the old menu
     inflater.inflate(R.menu.menu_fragment1, menu);
     super.onCreateOptionsMenu(menu, inflater);
}

Надеюсь, что это поможет.

Ответ 7

Ниже приведены шаги для отображения различных опций меню с различными фрагментами.

Шаг1: Вызов setHasOptionsMenu (true)

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        setHasOptionsMenu(true)
        super.onViewCreated(view, savedInstanceState)

    }

Шаг 2: Наполните элементы меню опций, связанных с фрагментом.

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
    // To clear previously added menu items
    menu?.clear()
    inflater?.inflate(R.menu.your_fragment_menu, menu)
    super.onCreateOptionsMenu(menu, inflater)
}

Ответ 8

Самый простой вариант - сделать

toolbar.inflateMenu(R.menu.fragment_menu);