2011-07-31 72 views
1

我用我的PreferenceActivity中的CheckBoxPreference來設置一個值。稍後,我想檢查Receiver和/或Service中的值。 findPreference()方法不適用於該上下文。我知道,無論如何,這個偏好值存儲在SharedPreferences,但關鍵是什麼?我怎樣才能獲得複選框的價值?如何在Android的Receiver/Service中獲取CheckBoxPreference值?

回答

6

我知道,這個偏好值存儲在SharedPreferences中,但是什麼是關鍵?

無論您的偏好XML中的android:key具有什麼值。

我怎樣才能得到複選框的值?

呼叫PreferenceManager.getDefaultSharedPreferences()得到SharedPreferences,然後調用getBoolean()與您android:key使用的密鑰。

+0

我希望Android的參考指南有這樣的信息... – jacek

+0

@jacek:你總是可以買一本書或三個... :-) – CommonsWare

0

我唯一加入CommonsWare答案的是,既然你提到了一個服務,那麼你可以在服務需要知道的Intent附加內容中加入任何偏好。例如:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
Intent intent = new Intent(this, MyService.class); 
intent.putExtra("mypref", prefs.getString("mypref", "")); 
startService(intent); 
+0

種依賴注射,好。 – jacek

+0

作爲對您的評論文檔的迴應,實際上有一個相當不錯的討論,並附有示例代碼,在這裏:http://developer.android.com/guide/topics/data/data-storage.html#pref – Earl

+0

I haven'沒有發現任何關於從內置的CheckBoxPreference中獲取數據的情況(除了獲得「CheckBoxPreference」本身)。 – jacek

2

在你的喜好將XML你就會有這樣的事情:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
<CheckBoxPreference android:enabled="true" 
    android:title="@string/s_pref" android:key="@string/pref" 
    android:defaultValue="@string/d_pref"></CheckBoxPreference> 
</PreferenceScreen> 

您的strings.xml將有這樣的事情:

<string name="pref">my.package.PREF</string> 
<string name="s_pref">Prompt</string> 
<string name="d_pref">true</string> 

您活動的onCreate( )會有這樣的事情:

prefs = PreferenceManager.getDefaultSharedPreferences(this); 
pref = prefs.getBoolean(getString(R.string.pref), true)); 

如果您想在某人更改首選項時執行某些操作,請將onActivityResult()添加到您的活動中,並使用startActivityForResult()啓動首選項活動。當用任何結果代碼調用onActivityResult()時,您可以執行另一個getDefaultSharedPreferences()來指示首選項中的更改。

的共享偏好框架自動持續的數據......你沒有積極應對它自己,雖然你可以,如果你想在喜好活動的OnPreferenceChangeListener

0

嘗試在寫這篇您服務

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplication()); 

,並在這裏指定已在XML

if(preferences.getBoolean(your key ,true)) 
      { 

希望這有助於使用的密鑰。

相關問題