1

2 つのアクティビティがあります。1 つ (SettingsActivity) は、次のように onStop() に設定を保存します。

SharedPreferences.Editor editor = getSharedPreferences("myprefs", Context.MODE_PRIVATE).edit();

editor.putString("login", etLogin.getText().toString());
editor.putString("password", etPassword.getText().toString());

editor.commit();

2 つ目 (MainActivy) は、onResume() で次のように読み取ります。

SharedPreferences prefs = activity.getSharedPreferences("myprefs", Context.MODE_PRIVATE);
prefs.getString(...);

設定を変更してメイン アクティビティに戻ると、古い値が読み込まれます。変更を行うには、SettingsActivity をもう一度開いて、もう一度戻る必要があります。

onResume() の隣の別のスレッドで実行されているルーチンを保存する onStop() は、読み取り時に変更がまだコミットされていませんか? 正しい動作を実現する方法は?

汚い解決策のアイデア: 私は自分の設定を保持し、save() と load() を持つシングルトンについて考えていますが、これは醜い解決策であり、これを適切に行う方法を知りたいです。

4

1 に答える 1

0

あなたがfinish()を呼び出す必要がない場合、SettingsActivityは停止しましたか?ユーザー名とパスワードを保存した後、onstop() メソッド (アクティビティのライフサイクル) を呼び出します。

save メソッドを呼び出すだけで、戻るボタンを押してメイン アクティビティに戻ると、onStop() メソッドは起動されません。SettingsActivity がまだ実行中であり、バックグラウンドで一時停止しているためです。

于 2012-07-07T22:26:47.073 に答える