C# 如何从代码中动态填充ListPreference?
下面是my PreferenceFragment的猜测工作代码,它不会产生任何错误,但似乎也没有做任何事情:)显示的是此ListPreference的静态xml版本。为了简化下面的示例,我展示了一个字符串数组“entries”和“entryValues”,用于填充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
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"});