【问题标题】:Preference not changing immediately in Android偏好不会在 Android 中立即改变
【发布时间】:2013-07-08 11:57:52
【问题描述】:

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();
}

}

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

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

【问题讨论】:

  • 尝试调用那些最初负责显示这些值的东西
  • 不要自己打电话给onSharedPreferenceChanged();。只需从某个地方更改首选项,它就会为您调用。并在 onSharedPreferenceChanged(); 方法中更新您的 GUI,就像您在 onCreate() 中所做的一样,以立即显示效果。
  • 都试过了,都不行.......
  • @Bhavin Nattar,请不要在其他人的帖子中添加您自己的标语(“在此先感谢...”)。通常,标语在编辑时会被删除,而不是添加。谢谢。 Please see this posting on Meta for more information about taglines.
  • @Sparky:感谢好友提供的信息...

标签: android sharedpreferences preferences


【解决方案1】:

希望您已经为您的偏好定义了一个 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();
}

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多