【发布时间】:2019-04-23 02:02:57
【问题描述】:
当我启动我的应用程序时,在第一次调用 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 和 Fragments。自从我最小化我的应用程序以来,我没有看到活动以及我的片段被破坏,只调用了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();
如您所见,AdditionFragment 是在开始时创建的,即使 setPrimaryItem() 没有被调用。 AdditionFragment 尝试从 ViewPager 片段获取的数据为 null,因为 latestFragment 为 null。
【问题讨论】:
标签: android android-fragments android-viewpager activity-lifecycle fragment-lifecycle