2011-05-25 136 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