PartagePreference Valeur par défaut de préférencesManager avec onsharedpreferenceChangeListener
-
07-11-2019 - |
Question
Je voulais faire une classe d'options, où vous pouviez charger toutes les préférences d'un utilisateur. S'il n'y a pas de clés dans le PartneadPreference, je voudrais charger les défauts de défaut XML en préférence.
Le problème est que je ne peux pas faire fonctionner un cours avec une préférence de préférence avec des outils onsharedpreferencECHangeListener. Et je ne peux pas faire charger ces clés. Alors, comment les autres applications font-elles cela? Le code engagé avec préférenceManager a-je également essayé, mais pas de chance là-bas :(
Un code pour les options de classe
static SharedPreferences GetSharedPreferences(Context context){
return context.getSharedPreferences("Name", Context.MODE_PRIVATE);
}
public static void ClearSharedPreferences(Context context){
GetSharedPreferences(context).edit().clear().apply();
}
public static void SaveTextSize(Context context, int size){
SharedPreferences sharedPreferences = GetSharedPreferences(context);
if (textSizeKey == null)
textSizeKey = context.getString(R.string.textSizeKey);
sharedPreferences.edit().putInt(textSizeKey, size).commit();
Log.v("Saving", "Text size save: " + size);
}
public static int LoadTextSize(Context context) {
SharedPreferences sharedPreferences = GetSharedPreferences(context);
if (textSizeKey == null)
textSizeKey = context.getString(R.string.textSizeKey);
if (!sharedPreferences.contains(textSizeKey))
Log.i("Load", "Key: " + textSizeKey + " not found");
return sharedPreferences.getInt(textSizeKey, 16);
}
Code de l'activité de préférence
public class SettingsActivity extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
private CheckBoxPreference mCheckBoxPreference;
private ListPreference mListPreference;
private static String updateCheckBoxName;
private static String updateListName;
private SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
updateCheckBoxName = getString(R.string.options_main);
updateListName = getString(R.string.options_toggle);
//PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
//sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences = Options.GetSharedPreferences(this);
mCheckBoxPreference = (CheckBoxPreference) findPreference(updateCheckBoxName);
mListPreference = (ListPreference) findPreference(updateListName);
}
@Override
protected void onResume() {
super.onResume();
updateScreen();
// Set up a listener whenever a key changes
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
private void updateScreen() {
mCheckBoxPreference.setSummary(sharedPreferences.getBoolean(
updateCheckBoxName, false) ? "Will automatic update"
: "No automatic update");
mListPreference.setSummary(mListPreference.getEntry());
}
@Override
protected void onPause() {
super.onPause();
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
Preference preference) {
// Hack for dialog
if (preference.equals(getString(R.string.textSizeKey))){
TextSizeAlert textSizeAlert = new TextSizeAlert(SettingsActivity.this) {
@Override
public void SizeCallback(int size) {
Options.SaveTextSize(getApplicationContext(), size);
}
};
textSizeAlert.ShowTextDialog();
return true;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
updateScreen();
}
}
Activité principale:
public void SomeMethod() {
int updateTime = Options.LoadUpdateTime(this);
//do something with it
}
Pas de solution correcte
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow