2013-07-15 129 views
3

我是一名新的Android开发人员,我的第一个应用几乎完成。Android更改首选项值并在首选项屏幕中更新显示

我在我要做的事情列表中最后一件事是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"。它现在按预期工作。

+0

为了任何人谁是寻找如何更新一个当另一个偏好更改,也请参阅http://stackoverflow.com/questions/7603633/updating-preferences-in-real-time。 – ToolmakerSteve

回答

1

提交将新值存储在存储器中,但不会更新存储器中的值。如果你想要这个功能,你应该使用apply。更多herehere

所以,你必须更换

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

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

希望这有助于...

+0

这并没有强制更新。当我回到偏好活动时,它仍然显示出旧的价值。当我关闭应用程序并重新启动应用程序时,两者的工作方式都一样。 – Jayrox

+0

@Jayrox这是奇怪的,我能想到的唯一的事情就是替换SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());在您的SharedPreferences活动中prefs = PreferenceManager.getDefaultSharedPreferences(this);我在某处读取了getApplicationContext()返回与活动不同的上下文。试试看,我不知道还有什么可能...... – Christos

+0

,这似乎也没有区别。 – Jayrox

相关问题