2017-01-19 4 views
1

나는 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 메서드를 호출하고 요약을 업데이트하면 안됩니까?

+0

onCreatePreferences() 메소드의 각 키에 대해 'onSharedPreferenceChanged'를 호출하고 있습니까? –

답변

1

먼저 설정을 변경하지 않았으므로 요약을 변경해도 onPreferenceChanged 수신기가 호출되지 않습니다. 그냥 그래픽 표현. 실제 환경 설정은 키 -> 값 쌍입니다.

둘째, 적용되지 않은 경우 적어도 커밋을 호출하여 호출 된 수신기를 가져와야합니다. 그때까지는 설정을 변경하려고하지만 적용/커밋이 호출 될 때까지 실제로 변경하지 않았습니다.

+0

.apply()를 사용하지만 .commit()도 제대로 작동하지 않았습니다. 내가 말한대로 이러한 키 - 값 쌍을 변경하지만 'OnSharedPreferencesChanged'는 그래픽 표현을 변경하기 위해 호출되지 않으며 이유를 파악하려고합니다. – dddeee