将数据存到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; }