2011-05-25 102 views
18

在我的设置页面中,我有一个首选项,它提取我想显示为单个复选框首选项的可切换设置的列表。用复选框以编程方式填充首选项

我知道preferences.xml支持生成首选项列表(查看wi-fi设置页面),但ListPreference只允许您从列表中选择一个。

我一直在寻找如何以编程方式生成首选项,但只能设法找到如何更改已经在XML中的首选项的属性。

+2

如果您只需要多选列表,请查看[MultiSelectListPreference](http://developer.android.com/reference/android/preference/MultiSelectListPreference.html) – Jokahero 2011-05-25 18:58:50

回答

39

下面是一个简单的例子(假设你正在扩展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); 
} 
+0

哇,这真是太简单了!谢谢! :) – isep 2011-05-25 19:25:06

+0

很高兴这是有用的:) – inazaruk 2011-05-25 19:26:46

+2

为了我的PreferenceFragment实际使用PreferenceScreen,我不得不调用'setPreferenceScreen(screen);'以及。 – ndsc 2013-11-30 12:23:38

1

编程方式添加的偏爱,在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复选框都在这个屏幕内。

+0

从XML和编程混合喜好是非常混乱。所有偏好都可以通过编程和个人创建,我认为编程方法比xml方法更方便 – slinden77 2016-10-09 20:41:52