Android: изменить элементы меню ActionBar из фрагмента - PullRequest
15 голосов
/ 09 марта 2012

Может ли кто-нибудь привести краткий пример того, как изменить содержимое панели действий в зависимости от того, что происходит во фрагменте? Мое намерение:

Обычные пункты меню -> Что-то во фрагменте перемещено -> пункты меню изменяются на кнопки сохранения / отмены.

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

Ответы [ 4 ]

22 голосов
/ 29 августа 2014

Фрагменты могут изменить меню на панели действий.Для этого вы должны добавить необходимый флаг во фрагмент oncreate(), используя метод setHasOptionsMenu(true);

Когда ваш фрагмент будет загружен, вы получите вызов на onCreateOptionsMenu(Menu menu, MenuInflater inflater), как в упражнении.Затем внесите необходимые изменения в свое меню.

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

7 голосов
/ 13 марта 2012

У меня работает следующее.У меня есть собственный класс, который реализует ListView.MultiChoiceModeListener внутри фрагмента:

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
    // Choose the correct Action Bar menu to display
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2;

    // Configure to use the desired menu
    mode.getMenu().clear();
    MenuInflater inflater = getActivity().getMenuInflater();
    inflater.inflate(menu);
}

Учитывая то, как вы обнаруживаете «что-то во фрагменте сместилось», расширение ListView.MultiChoiceModeListener может не сработать, но, надеюсь, это иллюстрируеткак изменить меню.Ключ должен получить доступ к экземпляру ActionMode.

4 голосов
/ 12 апреля 2012

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

1 голос
/ 03 октября 2015

Не уверен, что экземпляр ActionBar поможет вам с меню, но наверняка будет полезен. Вот способ получить об этом

Попробуйте получить ActionBar из FragmentActivity, используя метод onAttach (Activity Activity) во Fragment.

Прежде всего сделайте глобальный объект вашей FragmentActivity во Фрагменте следующим образом

public class YourFragment extends Fragment {

  private YourFragmentActivity context;
}

Переопределите это в классе YourFragment

@Override
public void onAttach(Activity activity){
    context = (YourFragmentActivity)activity;
    super.onAttach(activity);
}

Затем в методе OnCreate в YourFragment сделайте это

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState){
    ...

    android.support.v7.ActionBar actionBar = context.getSupportActionBar();

    ...
}
...