C# 如何从代码中动态填充ListPreference?

C# 如何从代码中动态填充ListPreference?,c#,android,xamarin,xamarin.android,C#,Android,Xamarin,Xamarin.android,下面是my PreferenceFragment的猜测工作代码,它不会产生任何错误,但似乎也没有做任何事情:)显示的是此ListPreference的静态xml版本。为了简化下面的示例,我展示了一个字符串数组“entries”和“entryValues”,用于填充ListPreference,但最终将从我的数据模型中检索这些字符串 public class UserSettingsFragment : PreferenceFragment { public override void O

下面是my PreferenceFragment的猜测工作代码,它不会产生任何错误,但似乎也没有做任何事情:)显示的是此ListPreference的静态xml版本。为了简化下面的示例,我展示了一个字符串数组“entries”和“entryValues”,用于填充ListPreference,但最终将从我的数据模型中检索这些字符串

public class UserSettingsFragment : PreferenceFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        // Load the preferences from an XML resource
        AddPreferencesFromResource(Resource.Xml.UserSettings);

        // http://stackoverflow.com/questions/5375363/dynamic-listpreference-in-android
        //var lp = new ListPreference(Context);
        //var lp = FindViewById<ListPreference>(0);  // "prefSoundPack"
        // var lp = FindPreference("prefSoundPack").Context;
        var lp = new ListPreference(FindPreference("prefSoundPack").Context);
        lp.PreferenceClick += lp_PreferenceClick;
    }

    void lp_PreferenceClick(object sender, Preference.PreferenceClickEventArgs e)
    {
        var lp = new ListPreference(e.Preference.Context);
        String[] entries = { "Pack1", "Pack2" };
        String[] entryValues = { "0", "1" };
        lp.SetEntries(entries);
        lp.SetEntryValues(entryValues);
    }
}
public类用户设置片段:PreferenceFragment
{
创建时公共覆盖无效(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
//从XML资源加载首选项
AddPreferencesFromResource(Resource.Xml.UserSettings);
// http://stackoverflow.com/questions/5375363/dynamic-listpreference-in-android
//var lp=新列表首选项(上下文);
//var lp=FindViewById(0);/“prefSoundPack”
//var lp=FindReference(“prefSoundPack”).Context;
var lp=新列表首选项(FindReference(“prefSoundPack”).Context);
lp.PreferenceClick+=lp_PreferenceClick;
}
作废lp_首选项单击(对象发送者,首选项。首选项单击事件参数e)
{
var lp=新的ListPreference(例如Preference.Context);
字符串[]项={“Pack1”,“Pack2”};
字符串[]entryValues={“0”,“1”};
lp.SetEntries(条目);
lp.SetEntryValues(entryValues);
}
}
My UserSettings.xml有如下内容

<PreferenceCategory android:title="@string/pref_Sound_settings">
    <ListPreference android:key="prefSoundPack"
                    android:title="@string/pref_SoundPacks_title"
                    android:summary="@string/pref_SoundPacks_summary"
                    android:defaultValue="1"
                    android:entries="@array/SoundPacks"
                    android:entryValues="@array/SoundPacksValues" >
    </ListPreference>
</PreferenceCategory>

因为没有答案;这应该在OnCreate方法内部起作用:

ListPreference preference = (ListPreference) FindPreference("key");
preference.SetEntries(new String[] {"Pack 1", "Pack 2"});
preference.SetEntryValues(new String[] {"0", "1"});