ozapa
ozapa

Reputation: 281

How to set MultiSelectListPreference defaultValue in code

I have a problem of setting MultiSelectListPreference dynamically (well anything dynamic is absolute mystery for Android but that's another story)

I wasn't able to set complete preferenceActivity just in code so I had to write preferences.xml and to modify controls in code.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
  <PreferenceCategory android:key="prefCat" android:title="CatTitle">

     <MultiSelectListPreference
       android:key="multiPref"
       android:title="Title"
       android:dialogTitle="DialogTitle"
       android:summary="Summary"/>

     <ListPreference android:key="listPrefOne"...></ListPreference>

     <ListPreference android:key="listPrefTwo"...></ListPreference>

  </PreferenceCategory>
</PreferenceScreen>

here is AppSettings code

public class AppSettings : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.AppSettings);

        var prefsFragment = new MyPreferenceFragment();

        var fragmentTransaction = FragmentManager.BeginTransaction();
        fragmentTransaction.Replace(Resource.Id.content, prefsFragment);
        fragmentTransaction.Commit();
    }
}

...and PreferenceFragment

public class MyPreferenceFragment : PreferenceFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        AddPreferencesFromResource(Resource.Xml.preferences);
        var multiPref = FindPreference("multiPref") as MultiSelectListPreference;

        var multiPreferenceCount = LocalDB.MultiPreferences.Count;
        var entries = new string[multiPreferenceCount];
        var entryValues = new string[multiPreferenceCount];
        var i = 0;

        foreach (var pref in LocalDB.MultiPreferences.OrderBy(e => e.Value.Name))
        {
            entries[i] = pref.Value.Name;
            entryValues[i] = pref.Value.ID.ToString();
            i++;
        }

        multiPref.SetEntries(entries);
        multiPref.SetEntryValues(entryValues);
        multiPref.SetDefaultValue(entryValues);
    }
}

This doesn't work. When I open my MultiSelectList all items are unchecked. Is there any way to fix this using MultiSelectListPreference ?

One more thing: on Android 5.0.1 when I set my MultiSelectListPreference (in preferences.xml) below listPrefTwo (in the same category) - application crashes on AddPreferencesFromResources. Strange, but if we're talking about MultiSelectListPreference at this point nothing can suprize me.

Upvotes: 5

Views: 1121

Answers (0)

Related Questions