Создать меню параметров во фрагменте

У меня есть основная деятельность вместе с 3 фрагментами. Я использую навигационный ящик для выбора этих фрагментов. Я хочу отредактировать параметры меню переполнения на панели действий на основе отображаемого фрагмента. Например: если фрагмент A отображается сейчас, я хотел бы иметь параметры «Редактировать», «Выйти» и «Настройки» под кнопкой переполнения. Если сейчас выбран фрагмент B, у меня должны быть только настройки.

Я попытался переопределить onCreateOptionsMenu() в основном действии с другим xml и во фрагменте с другим, но это не помогает, так как отображаются только параметры в основном действии.

В основной деятельности:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    //return true;
    return super.onCreateOptionsMenu(menu);
}

Во фрагменте А:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getActivity().getMenuInflater().inflate(R.menu.menu1, menu);
    //return true;
    return true;
}

main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_signout"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Sign Out"/>

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
</menu>

меню1.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_edit"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Edit Profile"/>
    <item
        android:id="@+id/action_signout"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="Sign Out"/>

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>    
</menu>

person vikash    schedule 28.06.2015    source источник


Ответы (2)


Вызовите setHasOptionsMenu(true) в onCreate() вашего фрагмента.

public void setHasOptionsMenu (boolean hasMenu)

Сообщите, что этот фрагмент хотел бы участвовать в заполнении меню параметров, получив вызов onCreateOptionsMenu(Menu, MenuInflater) и связанных методов.

Если hasMenu равно true, у фрагмента есть пункты меню, которые нужно внести.

Чтобы скрыть определенный элемент меню, вы можете вызвать для него setVisible(false) в onPrepareOptionsMenu(). Например:

@Override
public void onPrepareOptionsMenu(Menu menu) {

    //Hides MenuItem action_edit
    menu.getItem(R.id.action_edit).setVisible(false);
}
person Markus Rubey    schedule 28.06.2015
comment
я вызвал setHasOptions(true) в onCreateView() моего фрагмента, а также установил видимость на false с помощью menu.getItem((R.id.action_edit).setVisible(false), так как не было menu.get(). все еще вариант редактирования видно. - person vikash; 28.06.2015
comment
это дает следующее: возвращаемый тип несовместим с Fragment.onPrepareOptionsMenu(Menu) - person vikash; 28.06.2015
comment
Извините, скопировать и вставить не получится ;) - person Markus Rubey; 28.06.2015
comment
теперь приложение вылетает при запуске. - person vikash; 28.06.2015

Чтобы переопределить меню параметров, вы должны использовать setHasOtionsMenu(true) и

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return false;
    }

Вот и все

person Muhannad A.Alhariri    schedule 23.08.2016