0

Я использую вкладку Activity, предоставленную Android с android.support.v7.app.ActionBar.TabListener, ViewPager и FragmentPagerAdapter. Родитель Activty cointains и управляет тремя Fragment. Кроме того, родительская активность имеет способ сохранения данных, предоставленных фрагментами. Для того, чтобы получить данные, определенные в них (и не отослано родительским деятельности) Я написал следующий код:findFragmentByTag() возвращает null только на третьей вкладке ActioBar

MyFragment frag = (MyFragment) mSectionsPagerAdapter.getActiveFragment(mViewPager,1,getSupportFragmentManager());

Где getActiveFragment() является

 public Fragment getActiveFragment(ViewPager container, int position, FragmentManager mFragmentManager) { 
      String name = makeFragmentName(container.getId(), position); 
      return mFragmentManager.findFragmentByTag(name); 
     } 


     private String makeFragmentName(int viewId, int index) { 
      return "android:switcher:" + viewId + ":" + index; 
     } 

На самом деле, я следующий Проблема: когда я пытаюсь сохранить данные, предоставленные тремя фрагментами, у меня есть java.lang.NullPointerException, вызванный третьим фрагментом, который является нулевым. Это происходит, только если на моем устройстве не отображается второй или третий фрагмент. Я не понимаю, как избежать и исправить это поведение. Любое предложение?

ответ

2

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

viewpager.setOffscreenPageLimit(2)

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