画面の回転後にonSaveInstanceStateが呼び出されない 質問する

画面の回転後にonSaveInstanceStateが呼び出されない 質問する

onSaveInstanceState に関して多くの質問があることは承知していますが、私の問題に対する答えを見つけることができませんでした。

AppCompatActivity を拡張するアクティビティがあります。このアクティビティは 3 つのフラグメントを使用し、どのフラグメントが表示されているかを追跡するための変数 'int currentStep' があります。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 が呼び出されないことですが、Google のドキュメントによると、呼び出されるべきです。メッセージ「--------onsaveinstancestate--------」はコンソールに表示されません。ただし、メソッド onCreate の Bundle savedInstanceState は画面の回転後に null 以外になりますが、int 'currentStep' がありません。

いろいろ試してみました。AppCompatActivity を ActionBarActivity に変更し、super.onSavedInstanceState の呼び出しを別の場所に移動し、他の変数を保存してみましたが、何をしてもメソッドは実行されません。

また、マニフェストに android:configChanges がありません。

私のアプリケーションは、SDK バージョン 22、buildToolsVersion 22.0.1 に対してコンパイルされています。

ベストアンサー1

アプリがランニングAndroidのLollipop(API21)バージョン以降では、

public void onSaveInstanceState (Bundle outState, PersistableBundle outPersistentState);

意思ない21 より前のバージョンのプラットフォームには存在しないため、呼び出すことはできません。API 21 より前のデバイスをサポートするには、上記の代わりに次のメソッドをオーバーライドする必要があります。

public void onSaveInstanceState (Bundle outState);

これは API 21 以降でも機能するため、もちろん両方のメソッドをオーバーライドする必要はありません (PersistableBundle新しいメソッドに対応する必要があることがわかっている場合を除く)。

ドキュメントを見る

おすすめ記事