package com.maciekjanusz.compassproject.preferences; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; import com.maciekjanusz.compassproject.R; import java.util.ArrayList; import java.util.List; public class AppPreferencesFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); // everything below is for setting current pref value as Preference summary Preference unitSystemPreference = findPreference(getString(R.string.length_unit_list_preference_key)); Preference coordinatesInputPreference = findPreference(getString(R.string.coordinates_input_mode_preference_key)); List<Preference> preferences = new ArrayList<>(); preferences.add(unitSystemPreference); preferences.add(coordinatesInputPreference); for(Preference preference : preferences) { if(preference instanceof ListPreference) { preference.setSummary(((ListPreference) preference).getEntry()); preference.setOnPreferenceChangeListener(this); } } } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { if(preference instanceof ListPreference) { ListPreference listPref = ((ListPreference) preference); CharSequence[] entryValues = listPref.getEntryValues(); for (int i = 0, entryValuesLength = entryValues.length; i < entryValuesLength; i++) { CharSequence str = entryValues[i]; if (str.equals(newValue)) { preference.setSummary(listPref.getEntries()[i]); } } } return true; } }