2017-08-03 204 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'但片段不能保留 –