2013-07-15 128 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

相關問題