ViewPager Fragments依赖于来自父Activity的绑定服务的数据

时间:2014-02-15 08:55:06

标签: android android-viewpager fragment communication

我有一个活动主持一个包含5个片段的ViewPager(使用FragmentPagerAdapter)。我必须确保我的Fragments仅在父Activity的数据可用时填充其视图,并且该数据仅在父Activity的绑定服务调用onSeviceConnected方法后才可用。

因此,我将所有创建ViewPager,ActionBar选项卡,FragmentPagerAdapter等的代码放在onServiceConnected方法中,当Activity首次启动或者我再次销毁并重新启动时,一切运行良好。但是当配置改变时(当我旋转屏幕时),我调试我的程序并看到在Activity调用onCreate之后,当前选中的Fragment会立即调用onCreateView,当然会引起麻烦(因为那时服务没有被调用而且我没有没有为此片段参考准备好数据!)。

我也尝试使用事件监听器并使Fragments仅在父Activity通知时(当数据可用时)填充Views但由于使用了PagerAdapter,我无法管理何时创建Fragment View当然适合填充内容!

我想知道的是:当我们旋转屏幕时,活动将被销毁并重新创建是否正确?如果这是真的,为什么在这种情况下,Activity不会像第一次创建那样做同样的事情? 那么,有人能建议我对这个问题有所了解吗?

1 个答案:

答案 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()));
}