Xamarin android OnSharedPreferenceChangeListener

Flu*_*roc 6 c# android preferenceactivity xamarin.android xamarin

我有这个活动,但是没有被调用的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
} 
Run Code Online (Sandbox Code Playgroud)

Iam使用上面的Xamarin.Android v4.6.8代码是我最后一次尝试使这个工作我也尝试使用PreferenceScreen.PreferenceChange事件处理偏好更改但没有结果.

Tahnks寻求帮助.

Flu*_*roc 8

我找到了解决方案!改变

PreferenceScreen.SharedPreferences.
RegisterOnSharedPreferenceChangeListener(this);
Run Code Online (Sandbox Code Playgroud)

PreferenceManager.GetDefaultSharedPreferences(this).
RegisterOnSharedPreferenceChangeListener(this);
Run Code Online (Sandbox Code Playgroud)

会做的.

我希望它会对某人有所帮助.

  • 嘿,我正在实现相同的功能,但是使用了首选项片段。所以我在我的片段类中具有PreferenceManager.GetDefaultSharedPreferences(Activity)的OnPause和OnResume方法。RegisterOnSharedPreferenceChangeListener(this)并在OnPause中取消注册。但是,它们仍未在我的片段内调用。使用PreferenceFragment的实现是否应该有所不同? (2认同)