將數據存到SharedPreferences中,首先要得到Sharedpreferecnces對象,三種方法java
1.Context類的getSharedPreferences("filename",model),第一個參數是文件名,第二個是模式。MODE_PRIVATE默認模式,和傳0同樣,表示只有當前應用程序能夠對這個SharedPreferences文件操做。 MODE_MULTI_PROCESS用於多個進場對同一個SharedPreferences文件操做this
2.Activity類中的getPreferences() 只接受一個模式參數,自動將當前活動的類名做爲SharedPreferences的文件名。code
3. PerferenceManager類中的getDefaultSharedPreferences()方法,這是個靜態方法,它只接收一個Context參數,並自動使用當前應用程序的包名做爲前綴來命名SharedPreferences文件對象
這兩天一在用 CheckBoxPreference,想要實現它被選中以後,退出再進來依然是你選中的狀態。還有我要作的是AFragment的CheckBoxPreference勾選以後,BFragment的Preference的Enabled()才爲true,BFragment的Preference才能夠被點擊跳轉到別的Activityget
獲得SharedPreferences對象以後,it
1 調用SharedPreferences對象的edit()方法來獲取一個SharedPreferences.Editor對象class
2 向SharedPreferences.Editor對象中添加數據List
3 調用commit()方法提交,從而完成數據存儲過程
file
由於A,BFragment在同一個包下面,並且我在選則第一種方法的時候,沒有模式選,不知道是否是公司的framwork改了,我就選了第三種方法model
B裏在oncreate裏
mLed_settings=(Preference)findPreference(KEY_LED_SETTINGS); SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(this.getActivity()); boolean arg = preferences.getBoolean("ischecked", false);//讀key叫作ischecked的值,若是沒有,默認爲false mLed_settings.setEnabled(arg); }
A的oncreate
mOpenLedlightSettings = (CheckBoxPreference)findPreference(KEY_OPEN_LEDLIGHT); if (mOpenLedlightSettings != null) { mOpenLedlightSettings.setOnPreferenceChangeListener(this); SharedPreferences shp = PreferenceManager.getDefaultSharedPreferences(this.getActivity()); boolean arg = shp.getBoolean("ischecked", false);//查看下是否有狀態 mOpenLedlightSettings.setChecked(arg); } }
public boolean onPreferenceChange(Preference pref, Object newValue) { if (pref == mOpenLedlightSettings) { final boolean checked1 = (Boolean) newValue; mOpenLedlightSettings.setChecked(checked1); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this.getActivity()); Editor editor = preferences.edit(); editor.putBoolean("ischecked", checked1);//把key爲ischecked的鍵值對寫入 editor.commit(); } return true; }