我有一个活动主持一个包含5个片段的ViewPager(使用FragmentPagerAdapter)。我必须确保我的Fragments仅在父Activity的数据可用时填充其视图,并且该数据仅在父Activity的绑定服务调用onSeviceConnected方法后才可用。
因此,我将所有创建ViewPager,ActionBar选项卡,FragmentPagerAdapter等的代码放在onServiceConnected方法中,当Activity首次启动或者我再次销毁并重新启动时,一切运行良好。但是当配置改变时(当我旋转屏幕时),我调试我的程序并看到在Activity调用onCreate之后,当前选中的Fragment会立即调用onCreateView,当然会引起麻烦(因为那时服务没有被调用而且我没有没有为此片段参考准备好数据!)。
我也尝试使用事件监听器并使Fragments仅在父Activity通知时(当数据可用时)填充Views但由于使用了PagerAdapter,我无法管理何时创建Fragment View当然适合填充内容!
我想知道的是:当我们旋转屏幕时,活动将被销毁并重新创建是否正确?如果这是真的,为什么在这种情况下,Activity不会像第一次创建那样做同样的事情? 那么,有人能建议我对这个问题有所了解吗?
答案 0 :(得分:0)
如果可以,通常会将这些信息存储在 Bundle 中:
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()));
}