2013-09-22 4 views
1

Моя активность включает в себя только контейнер фрагментов, и я буду менять разные фрагменты. Я хочу, чтобы панель действий отображала разные значки действий в соответствии с текущим фрагментом. Например, когда фрагмент 1 активен, я хочу, чтобы панель действий отображала список переходов навигации, когда фрагмент 2 активен, я хочу, чтобы панель действий ничего не показывала.Что такое подходящее событие для обновления панели действий?

Мои вопросы:

1) Что такое правильное событие для обновления панели действий при замене фрагмента?

2) Когда фрагмент 2 становится активным, как восстановить панель действий в исходное состояние (удалить список удалений и, возможно, что-то еще)?

ответ

0

1) Сохраните ссылку на меню в своей деятельности. Создание частной собственности в вашей деятельности:

private Menu mMenu; 

2) Получить ссылку на меню в onCreateOptionsMenu:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.test_choice, menu); 
    mMenu = menu; 
    return super.onCreateOptionsMenu(menu); 
} 

3) Вы можете переключиться изменить элементы в панели действий, когда вам нужно , например Я создал этот метод, чтобы изменить иконку и название элемента панели действий:

private void displayActionBar() { 
    if (mMenu == null) return; 

    if (mQuestionStage) { 
     MenuItem nextItem = mMenu.findItem(R.id.action_testNext); 
     nextItem.setIcon(R.drawable.navigation_accept); 
     nextItem.setTitle(getResources().getString(R.string.action_testCheck)); 
    } else 
    { 
     MenuItem nextItem = mMenu.findItem(R.id.action_testNext); 
     nextItem.setIcon(R.drawable.navigation_forward); 
     nextItem.setTitle(getResources().getString(R.string.action_testNext)); 
    } 
} 

EDIT

На основании дополнительных комментариев, вот как вы можете переключить падение вниз в панели действий (между показывая и не показывая его). Вы можете использовать этот код, где это необходимо:

ActionBar actionBar = getSupportActionBar(); 
    if (actionBar.getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST) 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); 
    else 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
+0

Возможно, это не то, что я хочу. Я не хочу использовать Menu. Мне нужен раскрывающийся список на панели действий для фрагмента 1, и мне нужно удалить раскрывающийся список из панели действий до замены фрагмента 2. – TieDad

+0

См. Мой отредактированный ответ. – Szymon

0

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

  1. В вас onCreate() метод фрагмента, уведомляют деятельность, которую вы хотите изменить панель действий по setHasOptionsMenu(true). Без этого утверждения ваши фрагменты onCreateOptionsMenu() не будут вызываться, даже если вы его переопределите.

  2. Изменение ActionBar путем переопределения onCreateOptionsMenu() и обработать ответ в onOptionsItemSelected() методе все фрагменты. (Кстати, если вы не обрабатываете нажмёе, не забудьте позвонить super.onOptionsItemSelected())

  3. Не забудьте переопределить метод onBackStackChanged() или использовать другие способы, чтобы правильно обрабатывать пользовательский интерфейс (например, ActionBar), когда назад нажата кнопка и обратно стек используется. См. this android's develop guide article.

пс. если вы просто хотите удалить элемент панели действий предыдущего фрагмента в определенном фрагменте, просто вызывается menu.clear() в его onCreateOptionsMenu()

Смежные вопросы