Android更改首选项值并更新首选项屏幕中的显示

时间:2013-07-15 00:07:39

标签: android sharedpreferences preferences

我是一名新的Android开发人员,我的第一个应用程序已接近完成。

我在要做的事情列表中的最后一件事是Tasker集成。我的整合工作达到了一定程度。

我的应用程序目前设置为插件,并接受来自任务者的字符串并使用新字符串更新首选项。这很有效。

问题是当我重新启动我的应用时,首选项的值不会更新。在完全关闭应用程序并重新启动它之前,我无法更新首选项摘要。

所以问题是,如何强制我的应用程序从应用程序的onResume中重新加载首选项,还是有更好的方法在一起?

这是接收者更新偏好值的代码:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String album_name = bundle.getString(PluginBundleManager.BUNDLE_EXTRA_STRING_MESSAGE);
prefs.edit().putString("text_default_album", StringUtil.sanitize(album_name)).commit();
Log.d(TAG, "fr: "+prefs.getString("text_default_album", ""));

这是活动的onResume:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String album_name = prefs.getString("text_default_album", "");
Log.d(TAG, "album_name: "+album_name);

final Preference album = getPreferenceScreen().findPreference("text_default_album");
album.setSummary(album_name);

接收者的清单声明:

    <receiver
            android:name=".receivers.FireReceiver"
            android:exported="true"
            android:process=":background"
            tools:ignore="ExportedReceiver" >

        <!-- this Intent filter allows the plug-in to discovered by Locale -->
        <intent-filter>
            <action android:name="com.twofortyfouram.locale.intent.action.FIRE_SETTING" />
        </intent-filter>
    </receiver>

更新:对于任何可能遇到此问题并且正在努力解决问题的人,一旦我删除了接收器的AndroidManifest.xml声明中的android:process=":background"。它现在按预期工作。

1 个答案:

答案 0 :(得分:0)

Commit会将新值保存在存储中,但不会更新内存中的值。如果您需要此功能,则应使用apply。阅读更多herehere

所以你必须替换

prefs.edit().putString("text_default_album", StringUtil.sanitize(album_name)).commit();

prefs.edit().putString("text_default_album", StringUtil.sanitize(album_name)).apply();

希望这会有所帮助......