2

あなたの助けが必要です。アプリケーションを作成していて、メソッドonSaveInstanceState()とを使用していますonRestoreInstanceState()が、2 番目のメソッドが機能しません。

ホームボタンが押されたときにプログラムが onSaveinstancestate() にアクセスする方法を確認できますが、アプリケーションに戻ると、コードはonRestoreInstanceState()orを呼び出しませんonCreate()

その結果、アプリケーションはゼロから開始されます。理由がわかりません...助けてもらえますか?

これは私のコードです:

public class MainActivity extends ActionBarActivity {

MyView myView;

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        myView = new MyView(this);
        setContentView(myView);

    if (savedInstanceState != null) {
        myView .SetScore(savedInstanceState.getInt("Id"));
        myView .SetNivel(savedInstanceState.getInt("Valor"));  
    }
} 

.....

 @Override
    protected void onRestart(){
        super.onRestart();
        myView = new MyView(this);
        setContentView(myView );
    }

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    if (savedInstanceState != null) {
        myView.SetScore(savedInstanceState.getInt("Id"));
        myView.SetNivel(savedInstanceState.getInt("Valor"));
   }
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState){
    savedInstanceState.putInt("Score",myView.GetId());
    savedInstanceState.putInt("Nivel",muView.GetValor());
    super.onSaveInstanceState(savedInstanceState);
}
}
4

3 に答える 3

1

システムがアクティビティの停止を開始すると、onSaveInstanceState() が呼び出されるため、Activity インスタンスを再作成する必要がある場合に備えて、保存する追加の状態データを指定できます。アクティビティが破棄され、同じインスタンスを再作成する必要がある場合、システムは定義された状態データを onCreate() メソッドと onRestoreInstanceState() メソッドの両方に渡します。

これを確認できます https://developer.android.com/training/basics/activity-lifecycle/recreating.html

メソッド内の Toast で何が起こるかを確認できます。

そして、これをチェックしてください https://stackoverflow.com/a/4967491/3653989

于 2015-02-09T02:24:49.930 に答える
0

onRestoreInstanceState(...)アクティビティがバックグラウンドにある間に破棄された場合にのみ呼び出されます。「アクティビティを保存しない」開発者向けオプションをオンにすると、これを強制的に実行できます。

しかし、これでは、アプリが最初から再起動されたように見える理由を説明できません。データを正しく復元していますか? ログインを追加しonRestoreInstanceState(...)て、呼び出されて正しいことをしていることを確認します。そして、電話をかけるfinish()べきではない場所に電話していませんonPause()か?

于 2015-02-09T02:34:45.633 に答える