Android: как воссоздать панель действий при изменении фрагмента
У меня есть активность, показывающая несколько фрагментов.
Вид активности содержит только ViewPager, инициализированный пользовательским FragmentPagerAdapter.
Этот адаптер обеспечивает навигацию между тремя фрагментами.
Кажется, что все работает отлично, за исключением Action bar.
Я переопределяю метод onCreateOptionsMenu() в своих фрагментах, чтобы создать отдельную панель действий для любого фрагмента:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
//fragment specific menu creation
}
Когда я прокручиваю, появляется новый фрагмент, но Action bar остается неизменным в течение нескольких секунд. Вероятно, через несколько секунд этот метод вызывается и панель действий изменяется.
Это выглядит довольно плохо, когда панель действий изменяется через некоторое время после завершения салфетки.
Как я могу воссоздать панель действий сразу, прежде чем начать салфетки?
Ответы
Ответ 1
Вы можете попросить андроид повторно создать панель действий, прежде чем она автоматически выполнит вызов invalidateOptionsMenu();
Сделайте это где-то близко к точке, где вы меняете фрагменты, чтобы попытаться уменьшить "отставание" между изменением фрагмента и панели действий.
Edit
полное решение может выглядеть так:
class activity extends Activity{
private void switchFragment(){
...do fragment changing stuff
activity.invalidateOptionsMenu();
}
}
class someFragment extends Fragment{
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
//fragment specific menu creation
}
}
какой фрагмент открыт во время
activity.invalidateOptionsMenu();
затем вызовет его
onCreateOptionsMenu
и вы можете сделать создание определенного фрагмента в нем
Ответ 2
Это можно сделать, реализовав onCreateOptionsMenu и вызвав setHasOptionsMenu (true) в обратном вызове onAttach в каждом фрагменте и соответствующим образом изменив действия.
Чтобы показать фрагмент без каких-либо действий setHasOptionsMenu (false) в нем
Ответ 3
Если вы используете вкладки ActionBar, вы хотели бы увидеть этот ответ:
Как я могу изменить действия панели действий динамически?
Ответ 4
В конце концов, я не смог найти какой-либо звуковой способ достичь этого.
Лучше всего было бы сделать actionbar частью фрагмента, а не активностью, но это невозможно.
В конце концов вы получите меню и название панели действий очистки при запуске салфетки (вы можете установить специальный прослушиватель в PageView) и снова установить меню и заголовок, когда салфетки завершены, и будет показан новый фрагмент.
In дает некоторое время, и панель действий выглядит странно пустым во время салфетки, но лучше всего это можно сделать.
Android API c...