ViewPager/FragmentPageAdapter,重新创建后,不调用上次选择的视图的 onCreate()

ViewPager/FragmentPageAdapter, after recreation, does not call onCreate() of last selected view

我目前正在开发一个应用程序,其中一个片段内有 ActionBar 选项卡(主导航是 NavigationDrawer)。片段的 onCreate():

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    actionBar = activity.getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    Resources r = getResources();
    //(…) tabNames initialization

    adapter = new CustomTabAdapter(getFragmentManager());
}

onCreateView()

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment, container, false);
    viewPager = (ViewPager) rootView.findViewById(R.id.pager);
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(this);

    for (String tabName : tabNames) {
        actionBar.addTab(actionBar.newTab()
                .setText(tabName)
                .setTabListener(this));
    }
    return rootView;
}

有 4 个选项卡,每个选项卡都有自己的片段和布局。 CustomTabAdapter returns 其 getItem(int) 中正确片段的新实例。有 4 个选项卡。

现在我的问题是:

  1. 我启动应用程序。
  2. 我从 NavigationDrawer 列表中选择了这个选项卡片段。一切正常。
  3. 我从 NavigationDrawer 列表中选择了另一个片段,这意味着选项卡片段已被替换。
  4. 我再次选择标签片段。在从 NavigationDrawer 列表中选择另一个片段之前选择的与选项卡相关的片段,并且不会重新创建与之相邻的片段(ActionBar 选项卡下的空白屏幕)。我检查了那些片段的 onCreateView(…) 方法没有被调用。因此,在更改设备方向或选择不相邻的选项卡后,将再次显示正确的布局。

我怎样才能让它正常工作(在从 NavigationDrawer 列表重新进入选项卡片段时显示正确的布局而不是空白 space)?我运行没主意了。

它从缓存中获取片段而不重新创建

终于找到了解决办法。我的 CustomTabAdapterFragmentPagerAdapter 的扩展。我将其更改为 FragmentStatePageAdapter 的扩展,现在重新创建了片段。

@Louth this answer 中的更多详细信息。