[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
2022-03-13 03:37:46
質問
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分ほどドキュメントをつつきましたが、明らかなものは見つかりませんでした。
どのように解決するのですか?
をオーバーライドする必要があります。
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.
}
Bundleは、基本的にNVP(Name-Value Pair")マップを格納する方法であり、それは、以下のように渡される。
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");
}
通常、この手法はアプリケーションのインスタンス値(選択範囲、未保存のテキストなど)を保存するために使用されます。
関連
-
adb devices OffLine Solution(オフラインソリューション
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
AndroidStudio reports Could not resolve all artifacts for configuration ':app:classpath'.
-
ライブラリをモジュールとしてインポートする際にエラーが発生しました。Error:A problem occurred configuring project ':library'.
-
Androidで、onTouchEventでダブルクリックを実装し、ダブルクリックイベントとして判定する方法
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Intentsを使用して、あるAndroid Activityから別のAndroid Activityにオブジェクトを送信するにはどうすればよいですか?
-
[解決済み】Androidで透明なActivityを作成する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb devices OffLine Solution(オフラインソリューション
-
adb シェルがデバイスのオフラインを求めるプロンプトを表示する
-
AndroidでAttempt to invoke virtual method... on null object referenceの例外が発生する。
-
Android.mk:7: *** セパレータがありません。
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
アンドロイドリストビュー
-
アンドロイドの遅延実行のいくつかの方法
-
アプリの実行エラー。ターゲットデバイスが見つからない問題
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated