나는 PreferenceFragment
입니다. 이 단편의 내부에서 나는 이런 OnSharedPreferencesChanged
있습니다EditTextPreference 이외의 다른 방법을 사용하면 OnSharedPreferencesChanged가 호출되지 않습니다.
@Override
public void onSharedPreferenceChanged(SharedPreferences preference, String key) {
Preference pref = findPreference(key);
pref.setSummary(preference.getString(key, ""));
}
을 그리고이 같은 listener
바인딩 : 나는 일부 데이터는 단지 예상대로 변경 EditTextPrefence
에 입력을 변경하면
@Override
public void onResume(){
super.onResume();
getPreferenceManager().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceManager().getSharedPreferences()
.unregisterOnSharedPreferenceChangeListener(this);
}
합니다. 그러나 나는 단지 그것을 타이핑하는 것 외에 다른 설정을 변경하는 다른 방법을 원합니다. 나는 지리적 좌표로 고심하고 있으므로 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));
같은 라인을 유지해야한다는 것입니다 : 여기
위치가 PlacePicker
에서 선택 검색 내 코드의 조각 이 sharedPreferences.edit().putString(getResources().getString(R.string.pref_car_longitude_key), String.valueOf(longitude)).apply();
과 같은 줄은 내 SharedPrefences
을 계속 업데이트합니다. setSummary
을 제거하면 환경 설정 화면의 요약이 업데이트되지 않으며 내 SharedPreferences를 변경하고 있기 때문에이를 변경해야한다고 생각합니다. 그 다음에 OnSharedPreferencesChanged
메서드를 호출하고 요약을 업데이트하면 안됩니까?
onCreatePreferences() 메소드의 각 키에 대해 'onSharedPreferenceChanged'를 호출하고 있습니까? –