У меня есть PreferenceFragment
. Внутри этого фрагмента у меня есть OnSharedPreferencesChanged
вроде этого:OnSharedPreferencesChanged не вызывается после изменения настроек каким-либо другим способом, кроме использования EditTextPreference
@Override
public void onSharedPreferenceChanged(SharedPreferences preference, String key) {
Preference pref = findPreference(key);
pref.setSummary(preference.getString(key, ""));
}
И я связываю listener
так:
@Override
public void onResume(){
super.onResume();
getPreferenceManager().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceManager().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
Когда я изменить некоторые данные, просто введя его в EditTextPrefence
он меняется, как и ожидалось. Но я хотел бы иметь другой способ изменения моих предпочтений, просто набрав его. Я борюсь с географическими координатами, поэтому я хочу изменить широту и долготу данного объекта, используя PlacePicker
.
Вот часть моего кода, который получает место выбрал из PlacePicker
:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Place place = getPlace(getActivity(), data);
LatLng latLng = place.getLatLng();
double latitude = latLng.latitude;
double longitude = latLng.longitude;
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
Preference longitudePreference = findPreference(getResources().getString(R.string.pref_car_longitude_key));
longitudePreference.setSummary(String.valueOf(longitude));
Preference latitudePreference = findPreference(getResources().getString(R.string.pref_car_latitude_key));
latitudePreference.setSummary(String.valueOf(latitude));
sharedPreferences.edit().putString(getResources()
.getString(R.string.pref_car_longitude_key), String.valueOf(longitude)).apply();
sharedPreferences.edit().putString(getResources()
.getString(R.string.pref_car_latitude_key), String.valueOf(latitude)).apply();
}
Моя проблема заключается в том, что я должен держать такие строки latitudePreference.setSummary(String.valueOf(latitude));
, чтобы мои предпочтения трафаретной обновляется после местоположения определена с карты и строки, подобные этим sharedPreferences.edit().putString(getResources().getString(R.string.pref_car_longitude_key), String.valueOf(longitude)).apply();
, чтобы обновлять мой SharedPrefences
. Когда я удаляю setSummary
, тогда сводка на экране настроек не обновляется, и я считаю, что это необходимо, так как я меняю свои SharedPreferences. Не следует ли тогда вызывать метод OnSharedPreferencesChanged
и обновлять сводку?
Вы вызываете 'onSharedPreferenceChanged' для каждого из ваших ключей в методе onCreatePreferences()? –