[解決済み] onSavedInstanceStateの使い方の例を教えてください。
2022-10-15 19:45:39
質問
状態を保存するときに混乱しています。だから私は知っている
onSaveInstanceState(Bundle)
はアクティビティが破壊されようとするときに呼び出されます。しかし、どのようにして情報をそこに保存し、それを元の状態に戻すには
onCreate(Bundle savedInstanceState)
? このバンドルがどのように情報を復元するのか理解できません。どなたか例を示していただけると助かります。
開発ガイドでは、これを説明するのに良い仕事はしていません。
public class Conversation extends Activity {
private ProgressDialog progDialog;
int typeBar;
TextView text1;
EditText edit;
Button respond;
private String name;
private String textAtView;
private String savedName;
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dorothydialog);
text1 = (TextView)findViewById(R.id.dialog);
edit = (EditText)findViewById(R.id.repsond);
respond = (Button)findViewById(R.id.button01);
if(savedInstanceState != null){
savedInstanceState.get(savedName);
text1.setText(savedName);
}
else{
text1.setText("Hello! What is your name?");
respond.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = edit.getText().toString();
text1.setText("Nice to meet you "+ name);
}
});
}
}
@Override
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString(savedName, name);
}
}
どのように解決するのですか?
この
Bundle
は、保存したいすべての情報を入れる容器です。そこにデータを挿入するためにput*関数を使います。以下は、Bundle
.
putString
putBoolean
putByte
putChar
putFloat
putLong
putShort
putParcelable (used for objects but they must implement Parcelable)
あなたの
onCreate
関数では、この
Bundle
はプログラムに引き渡されます。アプリケーションが再読み込みされているか、初めて起動されたかを確認する最良の方法です。
if (savedInstanceState != null) {
// Then the application is being reloaded
}
データを取り出すには、put*関数と同じようにget*関数を使用します。データは名前と値のペアで保存されます。これはハッシュマップのようなものです。キーと値を与え、値を戻したいときにキーを与えれば、関数が値を取得します。以下に簡単な例を示します。
@Override
public void onSaveInstanceState(Bundle outState) {
outState.putString("message", "This is my message to be reloaded");
super.onSaveInstanceState(outState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
String message = savedInstanceState.getString("message");
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
保存されたメッセージは、画面にトーストされます。お役に立てれば幸いです。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] BottomSheetDialogFragmentの状態をexpandedに設定する。
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] Android ConstraintLayout - あるビューを別のビューの上に配置する
-
[解決済み] Android - Snackbar vs Toast - 使い方と違い。
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] proguard hell - 参照されているクラスが見つかりません。
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] AndroidにおけるViewPager2の適切な実装
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] HttpPostによる画像送信
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] 非推奨のandroid.support.v4.app.ActionBarDrawerToggleの置き換え方法
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。