2017-08-03 161 views
1

在我的活动中我有ViewPager这实现了两个fragments,在这些片段中我有一些弹出窗口,例如对话框,在旋转设备弹出窗口再次启动时,弹出窗口在createview上,从服务器获取一些数据,我如何保留这些碎片,以便在更改设备方向时再次加载?Android保留片段在ViewPager

活动:

private void setupViewPager(ViewPager viewPager) { 
    adapter = new RegisterViewPagerAdapter(getSupportFragmentManager()); 

    //adapter.addFragment(new FragmentEmpty()); 
    adapter.addFragment(FragmentCheckValidationCode.getInstance()); 
    adapter.addFragment(FragmentRegisterPhoneNumber.getInstance()); 

    viewPager.setOffscreenPageLimit(1); 
    viewPager.setAdapter(adapter); 
    registerPages.setCurrentItem(1); 
    registerPages.setPageMargin(50); 
    registerPages.setScrollDurationFactor(5); 
} 

片段:

public static FragmentCheckValidationCode getInstance() { 
    if (instance == null) { 
     instance = new FragmentCheckValidationCode(); 
    } 
    return instance; 
} 

FragmentCheckValidationCode:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //@formatter:off 
     activity     = getActivity(); 
     context     = getActivity().getBaseContext(); 
    //@formatter:on 

    setRetainInstance(true); 
} 
+0

使用FragmentPagerAdapter而不是FragmentStatePagerAdapter。这会将所有片段加载到内存中。对于保留实例,请参阅@SaravInferns回答 –

+0

@NinoHandler我将'FragmentPagerAdapter'更改为'FragmentStatePagerAdapter'并将'setRetainInstance(true);'添加到'onCreate'中,片段的对话框再次加载 –

+0

您是否使用不同的横向布局?如果不是,你可以添加 android:configChanges =“orientation | screenSize | keyboardHidden”到你的活动清单 –

回答

1

,如果你不为风景模式中使用不同的布局,你可以在你的清单标签

android:configChanges="orientation|screenSize|keyboardHidden" 

添加到您的活动。这告诉系统您自己处理配置更改。

+0

感谢和不同的布局呢?我如何管理? –

+0

然后你必须找到一个不同的解决方案: - 创建一个DialogFragment并用标签显示 - 检查onViewCreated()getSupportFragmentManager()。findFragmentByTag(DIALOG_TAG)并再次显示它... –

+0

如果我的问题有帮助,请也投票赞成,谢谢 –

0

在片段的onCreate使用setRetainIntanse(真);

@Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Retain this fragment across configuration changes. 
    setRetainInstance(true); 

    } 

参考here

+0

我有'onCreate'但片段不能保留 –