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

Android更改首选项值并更新首选项屏幕中的显示,android,sharedpreferences,preferences,Android,Sharedpreferences,Preferences,我是一个新的安卓开发者,我的第一个应用程序几乎完成了 我清单上最后要做的事情之一是Tasker集成。我有一个集成工作到一个点 我的应用程序当前设置为作为插件工作,接受tasker的字符串,并使用新字符串更新首选项。这是有效的 问题是当我重新启动我的应用程序时,首选项的值没有更新。在完全关闭应用程序并重新启动之前,我无法更新首选项摘要 所以问题是,我如何强制我的应用程序从应用程序的onResume中重新加载首选项,还是有更好的方法 这是来自接收器的更新首选项值的代码: SharedPreferen

我是一个新的安卓开发者,我的第一个应用程序几乎完成了

我清单上最后要做的事情之一是Tasker集成。我有一个集成工作到一个点

我的应用程序当前设置为作为插件工作,接受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”
。现在它的工作原理与预期一致

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

所以你必须更换

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


希望这有助于…

这也不会迫使首选项更新。当我回到偏好活动时,它仍然显示旧的值。当我关闭并重新启动我的应用程序时,两者的工作原理相同。@Jayrox这很奇怪,我唯一能想到的是替换SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(getApplicationContext());在您的活动中,使用SharedReferences prefs=PreferenceManager.GetDefaultSharedReferences(此选项);我在某处读到getApplicationContext()返回的上下文与活动不同。试试看,我不知道还有什么可能…我刚刚删除了
android:process=“:background”
code,现在它可以正常工作了。谢谢@Jayrox有一个缺点,现在你的接收器在主线程上运行,所以让onReceive尽可能小…-1:“提交将新值保存在存储中,但不会更新内存中的值”-这不可能是真的。如果是的话,那么每一个偏好都将被强制转到存储。这将完全违背内存中副本的目的。对于正在搜索如何在一个首选项发生更改时更新另一个首选项的任何人,请参阅。
prefs.edit().putString("text_default_album", StringUtil.sanitize(album_name)).apply();