我有一个活动主机,一个带有5个片段的ViewPager(使用FragmentPagerAdapter)。我必须确保我的Fragments只在父Activity中的数据可用时才填充它们的Views,并且该数据只有在父Activity的绑定Service调用onSeviceConnected方法后才可用。
所以,我把创建ViewPager、ActionBar选项卡、FragmentPagerAdapter的所有代码,。。。在onServiceConnected方法中,当Activity第一次启动或我销毁并再次启动时,一切都很好。但是,当配置发生变化时(当我旋转屏幕时),我调试我的程序,发现在Activity调用onCreate后,当前选定的Fragment会立即调用onCreateView,当然会引起麻烦(因为当时没有调用Service,我也没有准备好数据供Fragment引用!)。
我还尝试使用事件侦听器,并使Fragments仅在父Activity通知时(当数据可用时)填充Views,但由于使用PagerAdapter,我无法管理Fragment何时创建View,当然也无法管理它何时填充内容!
我想知道的是:当我们旋转屏幕时,"活动"会被破坏并重新创建,这正确吗?如果这是真的,为什么在这种情况下"活动"不会做与第一次创建时相同的事情?那么,有人能给我一个解决这个问题的主意吗?
如果可以,通常将这些信息存储在捆绑包:中
void createMyFragment(value) {
Bundle bundle = new Bundle();
bundle.putParcelable("key", value);
Fragment fragment = new MyFragment();
fragment.setArguments(bundle);
}
@Override
public void onCreate(Bundle bundle) {
value = bundle.getParcelable("key");
}
如果您无法做到这一点,例如,您可以将呼叫viewPager.setAdapter(pagerAdapter)
移动到onActivityCreated()
,而不是在onCreateView()
:中进行
@Override
public void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
viewPager = (ViewPager) dialogView.findViewById(R.id.viewpager);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
viewPager.setAdapter(new MyPagerAdapter(getActivity()));
}