问题
I'm using context.getSharedPreference instead of getDefaultSharedPreferences. Means :
SharedPreferences checkboxSetting = context.getSharedPreferences(
"myPreferenceDB", Context.MODE_PRIVATE);
boolean flag = checkboxSetting.getBoolean("checkboxKey",true);
And preference.xml :
<CheckBoxPreference
android:key="checkBoxPrefff"
android:title="@string/title"
android:defaultValue="true"/>
Application setting has a checkboxpreference that I want to get the value of, checked or not checked.
Will this work?
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equalsIgnoreCase("checkBoxPrefff")) {
sharedPreferences.getBoolean(key,true);
}
}
Does sharedPreferences use default database ( ..._preference.xml ) or my defined database ( "myPreferenceDB" )? Does key is "checkboxKey" or is null?
Because when I want to get value like
SharedPreferences temp = context.getSharedPreferences(
"myPreferenceDB", Context.MODE_PRIVATE);
boolean flag = temp.getBoolean("checkboxKey",true);
it's wrong and gets back defValue (true) . But when use like
SharedPreferences temp = PreferenceManager.getDefaultSharedPreferences(context);
boolean flag = temp.getBoolean("checkboxKey",true);
it works.
回答1:
Once again I would like to mention sharedPref is not a DB but rather an XML file. I hope you are looking for the following code.
public class SettingsActivity extends PreferenceActivity {
/*
* (non-Javadoc)
*
* @see android.preference.PreferenceActivity#onCreate(android.os.Bundle)
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getPreferenceManager().setSharedPreferencesName("myPref");
addPreferencesFromResource(R.xml.pref);
}
回答2:
You can register a SharedPreferenceChangedListener on any shared pref that you are using. It need not be the default shared preference.
getApplicationContext().getSharedPreferences("myPreferenceDB", 0).registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
// TODO Auto-generated method stub
}
});
来源:https://stackoverflow.com/questions/13286822/onsharedpreferencechanged-without-using-getdefaultsharedpreferences