私は Android SDK プラットフォームに取り組んできましたが、アプリケーションの状態を保存する方法が少し不明瞭です。そこで、「Hello, Android」の例を少し変更してみます。
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
private TextView mTextView = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = new TextView(this);
if (savedInstanceState == null) {
mTextView.setText("Welcome to HelloAndroid!");
} else {
mTextView.setText("Welcome back.");
}
setContentView(mTextView);
}
}
最も単純なケースではこれで十分だと思いましたが、アプリからどのように移動しても、常に最初のメッセージで応答します。
解決策はオーバーライドするなど簡単なものだと確信していますonPause
が、30 分ほどドキュメントを調べましたが、明らかなことは何も見つかりませんでした。
ベストアンサー1
onSaveInstanceState(Bundle savedInstanceState)
変更したいアプリケーション状態の値を次のようにオーバーライドしてパラメータに書き込む必要がありますBundle
。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save UI state changes to the savedInstanceState.
// This bundle will be passed to onCreate if the process is
// killed and restarted.
savedInstanceState.putBoolean("MyBoolean", true);
savedInstanceState.putDouble("myDouble", 1.9);
savedInstanceState.putInt("MyInt", 1);
savedInstanceState.putString("MyString", "Welcome back to Android");
// etc.
}
バンドルは、基本的に NVP (「名前と値のペア」) マップを保存する方法であり、次のようにアクティビティから値を抽出するためonCreate()
に に渡されます。onRestoreInstanceState()
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
double myDouble = savedInstanceState.getDouble("myDouble");
int myInt = savedInstanceState.getInt("MyInt");
String myString = savedInstanceState.getString("MyString");
}
あるいは断片から。
@Override
public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
super.onViewStateRestored(savedInstanceState);
// Restore UI state from the savedInstanceState.
// This bundle has also been passed to onCreate.
boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
double myDouble = savedInstanceState.getDouble("myDouble");
int myInt = savedInstanceState.getInt("MyInt");
String myString = savedInstanceState.getString("MyString");
}
通常、この手法は、アプリケーションのインスタンス値 (選択内容、未保存のテキストなど) を保存する場合に使用します。