2017-08-08 15 views
0

私は、アクティビティにいくつかの断片があり、ボトムバーによって変更されています。私はこの問題はローテーション中にフラグメントの状態を保存できません。

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

は、次のエラーを返すということです をOnce for all, how to correctly save instance state of Fragments in back stack?を使用することにより、フラグメント状態の処理を実装してみました:

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

てください:

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

私は次のsavedInstanceSetを持ってデバッグしている間ペーストソリューションはありません

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

などです。なぜなら、フラグメント(ランドとポートレートの異なるxmlファイル)を再作成する必要があるからです。

答えて

1

以下のコードを使用してください。

android:configChanges="orientation|screenSize" 

をmenifestし、あなたの活動ファイルにこの機能を追加するには、この行を追加し、

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

私がする必要があるので、私は、このいずれかを使用することはできませんland/layoutファイルから2つのフラグメントを再作成します。それで、他の解決策はありますか? –

+0

手動で「Lifecycle」メソッドを手動で呼び出すことはありません。彼らはOSによってのみ呼び出されるはずです。つまり、答えを取り除くことを検討してください。 –

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

私は土地/レイアウトファイルから2つの断片を再作成する必要があるので、これを使うことはできません。それで、他の解決策はありますか? –

+0

@Override public void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); setRetainInstance(true); }フラグメントのonCreateでこれを試してください –

+0

このメソッドは役に立たなかった –

関連する問題