OnSaveInstanceStateに関して多くの質問があることは知っていますが、問題に対する答えを見つけることができませんでした。
AppCompatActivityを拡張するアクティビティがあります。このアクティビティは3つのフラグメントを使用し、表示されているフラグメントを追跡するための変数 'intcurrentStep'があります。 onSavedInstanceStateメソッドでcurrentStep変数をバンドルに格納し、次にonCreateメソッドでそれを復元します。
public class MainActivity extends AppCompatActivity {
private final String CURRENT_STEP_TAG = "current_step";
private int currentStep;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pedido);
if(savedInstanceState == null) {
loadFirstFragment();
} else {
currentStep = savedInstanceState.getInt(CURRENT_STEP_TAG);
if(currentStep == 2){
//Do some stuff...
}
}
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
Log.d("deubg", "--------onsaveinstancestate--------");
outState.putInt(CURRENT_STEP_TAG, currentStep);
super.onSaveInstanceState(outState, outPersistentState);
}
...
}
重要なのは、画面の向きが変わってもonSavedInstanceStateが呼び出されないということです。グーグルのドキュメントによると、呼び出されるはずです。 「-------- onsaveinstancestate --------」というメッセージはコンソールに表示されません。ただし、onCreateメソッドのBundle savedInstanceStateは、画面の回転後にnull以外になりますが、int'currentStep 'がありません。
私は多くのことを試しました。ActionBarActivityのAppCompatActivityを変更し、super.onSavedInstanceStateの呼び出しを別の場所に移動し、他の変数を格納しようとしました。しかし、私が何をしても、メソッドは実行されません。
また、マニフェストにAndroid:configChangesがありません。
私のアプリケーションはsdkバージョン22、buildToolsVersion22.0.1に対してコンパイルされています
アプリがLollipop(API21)バージョンのAndroid以降)でrunningでない限り、
public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);
21より前のバージョンのプラットフォームには存在しないため、[〜#〜] not [〜#〜]は呼び出されます。preをサポートするには上記の代わりに、次のメソッドをオーバーライドする必要があるAPI21デバイス:
public void onSaveInstanceState (Bundle outState);
これはAPI21以降でも機能するため、もちろん、両方のメソッドをオーバーライドする必要はありません(新しいメソッドが提供するPersistableBundle
を処理する必要があることがわかっている場合を除く)。