从后台返回活动后,未调用FragmentPagerAdapter上的setPrimaryItem()

时间:2019-04-23 02:02:57

标签: android android-fragments android-viewpager activity-lifecycle fragment-lifecycle

启动应用程序时,第一次调用setPrimaryItem()时,我向主机活动添加了一个新片段。该片段从viewpager上的当前片段获取数据集。我将其添加到setPrimaryItem()内是因为我想确保在创建viewpager片段后将创建附加片段。

 @Override
            public void setPrimaryItem(ViewGroup container, int position, Object object) {
                if (latestFragment == null) {
                    latestFragment = (ViewPagerFragment) object;
                    addAdditionFragment();
                }

                    latestFragment = (ViewPagerFragment) object;
                super.setPrimaryItem(container, position, object);
            }

这是我运行应用程序时发生的事情:

HostActivity.setPrimaryItem();
ViewPagerFragment.onAttach();
ViewPagerFragment.onCreate();
ViewPagerFragment.onCreateView();
ViewPagerFragment.onActivityCreated();
ViewPagerFragment.onStart();
ViewPagerFragment.onResume();
AdditionFragment.onAttach();
AdditionFragment.onCreate();
AdditionFragment.onCreateView();
AdditionFragment.onActivityCreated();
AdditionFragment.onStart();
AdditionFragment.onResume();

将我的应用程序最小化到后台并打开其他一些应用程序之后。我回到应用程序,再次创建HostActivity和片段。自从我最小化我的应用程序以来,我没有看到活动以及片段被破坏,只调用了onStopped()

这是发生了什么

ViewPagerFragment.onAttach();
ViewPagerFragment.onCreate();
AdditionFragment.onAttach();
AdditionFragment.onCreate();
ViewPagerFragment.onCreateView();
ViewPagerFragment.onActivityCreated();
AdditionFragment.onCreateView();
AdditionFragment.onActivityCreated();
ViewPagerFragment.onStart();
ViewPagerFragment.onResume();
AdditionFragment.onStart();
AdditionFragment.onResume();

如您所见,即使未调用setPrimaryItem(),AdditionFragment也是在开始时创建的。尝试从ViewPager片段获取的数据AdditionFragment为null,因为LatestFragment为null。

1 个答案:

答案 0 :(得分:0)

您可能想调查onSaveInstanceState好友。此外,除此之外,如果您更喜欢,还可以在简历和暂停时使用。