1

だから私はOnsavedInstanceStateにこのコードを持っています

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}

そして、私はonCreateにこのコードを持っています

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(savedInstanceState==null){
        Toast.makeText(this, "not there", Toast.LENGTH_SHORT).show();
    }else{
        Toast.makeText(this, "is there", Toast.LENGTH_SHORT).show();
    }
}

トーストがいつもそこにないと言っているのはなぜですか?アプリを開いて別のアプリに切り替えたところ、トーストに保存された配列が表示されましたが、アプリを再度開くと、バンドルには「ハハ」を含む文字列配列が必要ですが、そこには表示されません。

どうもありがとう!

4

3 に答える 3

4

この変更されたオブジェクトをonSaveInstanceState()変更していて、保存していません。が のコピーであるsavedInstanceState場合、この変更は保存されません。superBundle

super.onSaveInstanceState(savedInstanceState);代わりに、メソッドの最後で呼び出してみてください。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    String [] a={"haha"};
    savedInstanceState.putStringArray("MyStringarray", a);
    super.onSaveInstanceState(savedInstanceState);
    Toast.makeText(context, "Saved array", Toast.LENGTH_SHORT).show();
}
于 2013-01-30T13:27:16.020 に答える
1

問題は、マニフェストでアクティビティを定義する方法にある可能性があります。たとえば、アクティビティに設定 android:clearTaskOnLaunch="true" がある場合、保存されたバンドルを受け取ることはないと思います。さまざまなアクティビティ設定の詳細については、http://developer.android.com/guide/topics/manifest/activity-element.htmlを参照してください。

他のオーバーライドされたメソッドを確認することもできます。たとえば、1 つをオーバーライドして奇妙なことをすると、アクティビティ スタックが台無しになる可能性があります。コードのどこかで finish() を呼び出していますか? その場合は、それを削除して何が起こるかを確認してください。

于 2013-01-30T13:31:29.440 に答える
0

このメソッドを、アクティビティがバックグラウンドに配置されているとき、または破棄の途中で常に呼び出されるonPause () や、破棄の前に呼び出されるonStop()などのアクティビティ ライフサイクル コールバックと混同しないでください。このメソッドではなくonPause() と onStop() が呼び出される例の 1 つは、ユーザーがアクティビティ B からアクティビティ A に戻る場合です。特定のインスタンスが復元されることはないため、B でonSaveInstanceState(Bundle) を呼び出す必要はありません。であるため、システムはそれを呼び出さないようにします。onPause() が呼び出され、 onSaveInstanceState(Bundle)が呼び出されない場合の例アクティビティ B がアクティビティ A の前に起動されたときです。A のユーザー インターフェイスの状態がそのまま維持されるため、B の存続期間中にアクティビティ A が強制終了されない場合、システムはアクティビティ Aで onSaveInstanceState(Bundle) を呼び出すことを回避できます。

于 2013-01-30T13:40:14.573 に答える