0

MainActivity.class,

我正在改变偏好的值,如下所示:

    mPrefs = StripedMain.this
                    .getSharedPreferences(SHARED_PREFS_NAME, 0);
            mPrefs.registerOnSharedPreferenceChangeListener(this);
            onSharedPreferenceChanged(mPrefs, null);

public void onSharedPreferenceChanged(SharedPreferences prefs,
                String key) {

                preVal = prefs.getString(key, "st");
if (preVal.equals("a")){
      prefs.edit().putString("name", "Rob").commit();
}

}

这可行,但屏幕本身的值不会立即更改,而只会在设置屏幕关闭并再次打开后更改。

那为什么会这样,我该如何解决呢?

4

1 回答 1

0

希望您已经为您的偏好定义了一个 xml。假设你有一个edittext pref,你应该在pref xml中有这样的东西:

<EditTextPreference
         android:summary="@string/summary" 
         android:title="@string/textinput" 
         android:key="input" 
         android:defaultValue= "@string/initialvalue" />

你需要定义一个默认值,如果你想读取这个值并在你的应用程序启动时甚至在用户没有进行任何设置更改之前进行一些初始化。在用户在此首选项中存储新值之前,将使用此默认值。

MainActivity应该实施OnSharedPreferenceChangeListener

使用以下逻辑读取和编辑您的 sharedpref 值

SharedPreferences mPrefs = getSharedPreferences(SHARED_PREFS_NAME, 0);
mPrefs.registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(mPrefs, input); // this will initialise with existing pref value

public void onSharedPreferenceChanged(SharedPreferences prefs,
                String key) {

if (key.equals("input")) { // doing a check for key if you want to add more prefs in future
     preVal = prefs.getString(key, "st");
     if (preVal.equals("a")){
      prefs.edit().putString("name", "Rob").commit();
}
于 2013-07-09T06:49:23.083 回答