PartagePreference Valeur par défaut de préférencesManager avec onsharedpreferenceChangeListener

StackOverflow https://stackoverflow.com/questions/8943858

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
scroll top