it-swarm.com.ru

Панель инструментов 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"
/>
59
Joe Eigi
@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);
}
117
Gundu Bandgar

Вот как динамически создавать меню: 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);
29
Allen Chan

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

1. Найдите панель инструментов в Activity и установите ее как 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);
}

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

@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);
    }
}
14
Prateek Gupta

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

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

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

@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);
}
4
Hai Rom

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

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

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

@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);
}

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

2
Matteo Gariglio

Ниже приведены шаги, чтобы показать разные пункты меню с разными фрагментами.

Шаг 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)
}
0
takharsh