在我的设置页面中,我有一个首选项,它提取我想显示为单个复选框首选项的可切换设置的列表。用复选框以编程方式填充首选项
我知道preferences.xml
支持生成首选项列表(查看wi-fi设置页面),但ListPreference
只允许您从列表中选择一个。
我一直在寻找如何以编程方式生成首选项,但只能设法找到如何更改已经在XML中的首选项的属性。
在我的设置页面中,我有一个首选项,它提取我想显示为单个复选框首选项的可切换设置的列表。用复选框以编程方式填充首选项
我知道preferences.xml
支持生成首选项列表(查看wi-fi设置页面),但ListPreference
只允许您从列表中选择一个。
我一直在寻找如何以编程方式生成首选项,但只能设法找到如何更改已经在XML中的首选项的属性。
下面是一个简单的例子(假设你正在扩展PreferenceActivity
):
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this);
PreferenceCategory category = new PreferenceCategory(this);
category.setTitle("category name");
screen.addPreference(category);
CheckBoxPreference checkBoxPref = new CheckBoxPreference(this);
checkBoxPref.setTitle("title");
checkBoxPref.setSummary("summary");
checkBoxPref.setChecked(true);
category.addPreference(checkBoxPref);
setPreferenceScreen(screen);
}
编程方式添加的偏爱,在XML文件中的其他喜好: 其他解决方案并没有为我工作,因为我也有一个XML与偏好。我不确定所有这些电话都是必要的/多余的,但这是有效的。
onCreate()方法,类扩展PreferenceActivity:
setContentView(R.layout.preferences);
addPreferencesFromResource(R.xml.preferences);
PreferenceScreen pScreen = getPreferenceManager().createPreferenceScreen(this);
CheckBoxPreference cb = new CheckBoxPreference(this);
cb.setKey("cb");
cb.setTitle("BLAH");
cb.setOrder(99); //not working...
pScreen.addPreference(cb);
setPreferenceScreen(pScreen);
addPreferencesFromResource(R.xml.preferences);
旁注:由于我需要生成一个动态复选框列表,它是最适合的内PreferenceScreen内部。所以我在xml里创建了这个PreferenceScreen,然后在里面动态生成了复选框。这样,排序并不重要,因为所有'新'dynamica复选框都在这个屏幕内。
从XML和编程混合喜好是非常混乱。所有偏好都可以通过编程和个人创建,我认为编程方法比xml方法更方便 – slinden77 2016-10-09 20:41:52
如果您只需要多选列表,请查看[MultiSelectListPreference](http://developer.android.com/reference/android/preference/MultiSelectListPreference.html) – Jokahero 2011-05-25 18:58:50