метод instantiateItem вызывается слишком поздно при ротации - PullRequest
0 голосов
/ 06 октября 2018

Я создаю приложение для Android с ViewPager, содержащим две вкладки.Каждый раз, когда пользователь проводит пальцем по пейджеру просмотра, я запускаю метод, который вызывает следующую функцию:

public void invalidateFragmentMenus(int position) {
    Fragment visibleFragment = pagerAdapter.getCurrentlyVisibleFragment(position);

    for (int i = 0; i < pagerAdapter.getCount(); i++) {
        for (Fragment fragment : pagerAdapter.getNestedFragments(i)) {
            fragment.setHasOptionsMenu(fragment == visibleFragment);
        }
    }
    invalidateOptionsMenu();
}

Эта функция делает недействительными меню каждого фрагмента, чтобы на панели инструментов отображались соответствующие значки.Только меню, видимое в данный момент Fragment на текущей выбранной вкладке ViewPager, будет иметь включенное меню опций.

Моя проблема в том, что когда устройство поворачивается, у меня появляется панель инструментов без каких-либо значков.В onResumeFragments моего единственного родителя FragmentActivity я вызываю invalidateFragmentMenus метод, упомянутый выше.Во время работы onResumeFragments фрагменты в FragmentPagerAdapter еще не были установлены (метод instantiateItem еще не был вызван), и я не могу получить доступ к элементам, отображаемым в моем FragmentPagerAdapter.Это приводит к пустой панели инструментов без значков.

Есть ли способ, которым мой FragmentActivity может прослушивать, когда мой FragmentPagerAdapter завершил создание своих элементов?Таким образом, я могу затем вызвать мой invalidateFragmentMenus метод?Или есть метод жизненного цикла FragmentActivity, который может помочь мне достичь этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...