Использование кэшей ViewPager Фрагменты после поворота экрана?

Сначала я создаю свои фрагменты внутри Activity onCreate (). Чем я занимаюсь созданием ViewPager и настройкой адаптера. Я сохраняю глобальную ссылку на фрагменты, чтобы обновлять их по мере необходимости. Кроме того, эти фрагменты доступны адаптером.

Моя проблема в том, что я замечаю, как только экран поворачивается, Фрагменты воссозданы, но ViewPager все еще содержит исходные фрагменты, созданные … ??

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

protected void onCreate (Bundle savedInstanceState) { ... ... // set up cards mFrag1 = new Frag1(); mFrag1.setOnActionEventListener(mOnActionEvents); mFrag2 = new Frag2(); mFrag3 = new Frag3(); mFragPager = (ViewPager) findViewById(R.id.vpPager); mFragAdapter = new FragAdapter(getSupportFragmentManager()); mFragPager.setAdapter(mCardAdapter); mFragPager.setOnPageChangeListener(mOnCardChange); } 

Глобальные экземпляры и статические фрагменты – определенно плохая идея. Если вы не вызываете setRetainInstance() на фрагменте, он будет сериализован в Bundle и воссоздан, когда родительская активность будет воссоздана (на экране вращается и т. Д.). Это, конечно, приведет к созданию новых экземпляров фрагмента, и ваши старые ссылки будут недействительными. Вы должны получить ссылки на фрагменты с помощью FragmentManager.findFragmentById/Tag() мере необходимости и определенно не хранить их в статических переменных.

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