Подтвердить что ты не робот

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 остается неизменным в течение нескольких секунд. Вероятно, через несколько секунд этот метод вызывается и панель действий изменяется.

Это выглядит довольно плохо, когда панель действий изменяется через некоторое время после завершения салфетки. Как я могу воссоздать панель действий сразу, прежде чем начать салфетки?

4b9b3361

Ответ 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) в нем

Ответ 4

В конце концов, я не смог найти какой-либо звуковой способ достичь этого.

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

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

In дает некоторое время, и панель действий выглядит странно пустым во время салфетки, но лучше всего это можно сделать.
Android API c...