6

我有这个活动,并且没有调用 OnSharedPreferenceChanged 的​​问题。我的用例是我想在偏好描述中显示偏好值。下面翻译的代码是从 java 翻译过来的,可以很好地工作。

[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 事件来处理首选项更改但没有结果。

寻求帮助。

4

1 回答 1

8

我找到了解决方案!改变

PreferenceScreen.SharedPreferences.
RegisterOnSharedPreferenceChangeListener(this);

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

会成功的。

我希望它会帮助某人。

于 2013-07-12T10:55:03.603 回答