2017-09-05 39 views
0

首先,我已經嘗試了所有可用的解決方案,但我仍然沒有得到這個問題的答案。如何在更換碎片時保存數據

我有一個活動,有幾個片段將填充ViewPager,我填充viewPager的方式是這樣。

fragment = getSupportFragmentManager(); 
     fragment.beginTransaction() 
       .replace(R.id.homepageVp, newFrag) 
       .addToBackStack(null) 
       .commit(); 

suppouse有片段A和I替換它通過使用以上的代碼片段B,然後在這裏是我的問題,是有可能從片段A移動到片段B並使用上面的代碼移回片段A但仍包含以前替換(第一個)的數據。

我已經使用

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString(VAR_KEY, jsonResult); 
} 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    jsonResult = savedInstanceState.getString(VAR_KEY); 
} 

片段A裏面試過了,這是我的理解,是的onSaveInstanceState執行後保存jsonResult變量,這樣當再次執行onActivityCreated創建我的活動,並把以前的值成jsonResult變量。但那不起作用,所以也許我犯了一個錯誤,或者我對碎片生命週期的理解不正確。

+0

爲什麼不創建一個單獨的類來存儲JSON和從任何地方訪問它? –

+0

你試過onCreateView而不是onActivityCreated? – phpdroid

回答

0

如果你不想重新創建viewPager片段只設置在offscreenPageLimitviewPager這樣的:

viewPager.setOffscreenPageLimit(/*Total no of fragments*/);