重新创建后,ViewPager / FragmentPageAdapter不会调用最后一个选定视图的onCreate()

时间:2015-09-07 14:01:51

标签: android android-fragments tabs android-viewpager fragmentpageradapter

我目前正在处理一个应用程序,其中一个片段位于其片段内(主导航是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在其getItem(int)中返回正确片段的新实例。共有4个标签。

现在我的问题是:

  1. 我开始申请。
  2. 我从NavigationDrawer列表中选择此选项卡片段。一切都很好。
  3. 我从NavigationDrawer列表中选择另一个片段,这意味着用它替换了tab片段。
  4. 我再次选择标签片段。与从NavigationDrawer列表中选择另一个片段之前选择的选项卡相关的片段,并且不会重新创建与其相邻的片段(ActionBar选项卡下的空白屏幕)。我检查了那些片段的onCreateView(…)方法没有被调用。因此,在更改设备方向或选择不相邻的标签后,再次显示正确的布局。
  5. 如何使其正常工作(从NavigationDrawer列表而不是空格重新输入选项卡片段时显示正确的布局)?我的想法用完了。

2 个答案:

答案 0 :(得分:1)

最后,我找到了解决方案。我的CustomTabAdapterFragmentPagerAdapter的扩展名。我将其更改为FragmentStatePageAdapter的扩展名,现在重新创建片段。

@Louth的this answer更多细节。

答案 1 :(得分:0)

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