2013-07-03 4 views
4

이 활동이 있고 OnSharedPreferenceChanged가 호출되지 않는 문제가 있습니다. 유스 케이스에 환경 설정 값을 표시하고 싶습니다. 아래 번역 된 코드는 Java에서 번역되었으며 어디에서 완벽하게 작동합니다.Xamarin android OnSharedPreferenceChangeListener

[Activity]   
public class PrefActivity : PreferenceActivity, ISharedPreferencesOnSharedPreferenceChangeListener 
{ 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     AddPreferencesFromResource(Resource.Xml.preferences); 
    } 

    protected override void OnResume() 
    { 
     base.OnResume(); 
     PreferenceScreen.SharedPreferences. 
      RegisterOnSharedPreferenceChangeListener(this); 
    } 

    protected override void OnPause() 
    { 
     base.OnPause(); 
     PreferenceScreen.SharedPreferences. 
      UnregisterOnSharedPreferenceChangeListener(this); 
    } 
    #region ISharedPreferencesOnSharedPreferenceChangeListener implementation 
    public void OnSharedPreferenceChanged(ISharedPreferences sharedPreferences, string key) 
    { 
     Preference pref = FindPreference(key); 

     if (pref is ListPreference) 
     { 
      ListPreference listPref = (ListPreference)pref; 
      listPref.Summary = listPref.Entry; 
     } 
    } 
    #endregion 
} 

스피 사용 Xamarin.Android의 v4.6.8의 위의 코드는이 작업 필자는 기본 설정 변경을 처리하지만 결과 PreferenceScreen.PreferenceChange 이벤트를 사용하여 시도 할 수있는 마지막 시도이다.

Tahnks 도움.

답변

6

Ive found solution!

PreferenceManager.GetDefaultSharedPreferences(this). 
RegisterOnSharedPreferenceChangeListener(this); 

PreferenceScreen.SharedPreferences. 
RegisterOnSharedPreferenceChangeListener(this); 

을 변경하면 트릭을 할 것입니다.

누군가가 도움이되기를 바랍니다.

+0

확실히, 감사합니다 :) – rouen

+0

물론 나를 위해 않았다. 매우 도움이됩니다. –

+1

안녕하세요. 동일한 작업을 구현하고 있지만 기본 설정 조각을 대신 사용하고 있습니다. 그래서 PreferenceManager.GetDefaultSharedPreferences (Activity)를 사용하여 프래그먼트 클래스 내에서 OnPause 및 OnResume 메소드를가집니다. RegisterOnSharedPreferenceChangeListener (this) 및 OnPause에서 등록을 취소합니다. 그러나, 그들은 여전히 ​​내 조각 내에서 호출되지 않습니다. PreferenceFragment를 사용하여 구현이 달라야합니까? – naffie