Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Xamarin android OnSharedPreferenceChangeListener

I've got this activity and have a problem with OnSharedPreferenceChanged not being called. My use case is that i want to show preference value in preference description. Code below translated is translated from java where works perfectly fine.

[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
} 

Iam using Xamarin.Android v4.6.8 code above is my last attempt to make this working ive also tried using PreferenceScreen.PreferenceChange event for handling preference changes but with no results.

Tahnks for help.

like image 470
FluffyCroc Avatar asked Jul 03 '13 15:07

FluffyCroc


1 Answers

Ive found solution! changing

PreferenceScreen.SharedPreferences.
RegisterOnSharedPreferenceChangeListener(this);

to

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

will do the trick.

I hope that it will help somebody.

like image 130
FluffyCroc Avatar answered Sep 21 '22 03:09

FluffyCroc