2

からいくつかの値を読み取ってSharedPreferencesa に表示する「アクティビティ a」を持っていますTextView。次に、「アクティビティ b」を呼び出します。ここで、からの値SharedPreferencesが更新されて に書き戻されSharedPreferencesます。最後に、戻るボタンを押して「アクティビティ a」に戻ります。これで、新しい (更新された) 値が読み込まSharedPreferencesれ、TextView. しかし、ここで問題が発生します。読み取ったばかりの値SharedPreferencesはまだ更新されていません (アクティビティ b によって設定された新しい値ではありません) (logcat 出力から取得)。SharedPrefs何らかの手動更新が必要ですか?

「アクティビティ a」を再起動すると、すべてが正常に機能し、新しい値が適切に表示されます。どうしたの?

メソッドを呼び出してonResume()、「アクティビティ a」の値を読み取って表示します。

また、SharedPrefs-Object を (を使用して) 再インスタンス化しようとしましgetSharedPreferences()たが、どちらも役に立ちません。

前もって感謝します!

4

5 に答える 5

2

新しい値を保存するために、アクティビティbでcommit()メソッドを呼び出していますか。

例:

SharedPreferences customSharedPreference = getSharedPreferences("abcprefs", 0);
SharedPreferences.Editor editor = customSharedPreference.edit();
editor.putString("key", "val");
editor.commit();

次に、アクティビティbに送信される前にアクティビティaをfinish()できます。次に、アクティビティbaから、アクティビティaの新しいインスタンスが作成され、onCreate()が呼び出されます。

または、アクティビティbに送信されたときにアクティビティが「表示されなくなった」可能性があるため、onStart()で設定を更新できます。

アクティビティのライフサイクルを確認するには、http://developer.android.com/guide/topics/fundamentals/activities.htmlを参照してください。

于 2011-06-09T13:40:32.223 に答える
1

SharedPreferencesアクティビティ間でデータを共有するためのものではありません

とを使用IntentActivity.startActivityForResultます。ここで私の答えを参照してください アクティビティでインテントオブジェクトを取得します

于 2011-06-09T13:34:39.510 に答える
0

また、preference.edit() はSharedPreferences.Editor呼び出すたびに異なる値を返すことにも注意してください。そのため、エディターを別の変数に保存し、それを使用して設定を書き出してから、そのエディターをコミットすることが重要です。たとえば、これは機能しません:

myPrefs.edit().putInt("pref", 1);
myPrefs.edit().putBoolean("pref", true);
myPrefs.edit().commit();

それは(実証されているように)する必要があります:

SharedPreferences myPrefs = getSharedPreferences("pref_name", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myPrefs.edit();
editor.putInt("pref", 1);
editor.putBoolean("pref", true);
editor.commit();
于 2012-01-07T19:36:31.077 に答える
0

各アクティビティで同じ設定を使用していることを確認してください。 を使用している場合はgetSharedPreferences、ファイルとアクセス レベルを指定する必要があります。getDefaultSharedPreferencesあなたの場合、それは行くべき道のように聞こえます。

また、環境設定を設定するだけでなく、変更をコミットしていることも確認してください。

SharedPreferences preferences = getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", "value");
editor.commit();

そして、あなたの他の活動で:

SharedPreferences preferences = getDefaultSharedPreferences(this);
boolean myPreference = preferences.getBoolean("key", defaultValue);

問題のコードを投稿すると、これを簡単に解決できます。それでもうまくいかない場合は、投稿に追加してみてください。

于 2011-06-09T14:27:51.837 に答える