2017-08-08 65 views
0

我在活動中有幾個片段,由底欄更改。我嘗試用Once for all, how to correctly save instance state of Fragments in back stack? 的問題是,旋轉過程中無法保存片段狀態

mContent = getSupportFragmentManager().getFragment(savedInstanceState, TAG); 

返回一個錯誤來實現片段狀態處理:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 

在調試我的下一個savedInstanceSet:

[email protected], size = 4 
value[0]=Bundle 
value[1]="FragmentName" 
value[2]=FragmentManagerState 
value[3]={Integer}"0" 

請不要粘貼像

setRetainInstance(true), 
android:configChanges="orientation|screenSize" 

等等,因爲我需要重新創建片段(不同的xml文件的土地和肖像)。

回答

1

使用下面的代碼;

添加此行menifest

android:configChanges="orientation|screenSize" 

這個功能添加到您的活動文件,

@Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
      onCreate(savedInstanceState); 
     } 
+0

我不能用這一個,因爲我需要從土地/佈局文件重新創建2個片段。那麼還有其他解決方案嗎? –

+0

永遠不要手動調用'生命週期'方法。他們應該只被操作系統調用。話雖如此,請考慮刪除答案。 –

0

Include this in your manifest if you dont want to override config change

<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|screenLayout" > 

This basically allows OS to handle orientation change for you if you dont want override onConfigChange this code should work fine

+0

我不能使用這個,因爲我需要從land/layout文件重新創建2個片段。那麼還有其他解決方案嗎? –

+0

@Override public void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); setRetainInstance(true); }嘗試使用此片段的onCreate –

+0

此方法並沒有幫助 –