在我的設置頁面中,我有一個首選項,它提取我想顯示爲單個複選框首選項的可切換設置的列表。用複選框以編程方式填充首選項
我知道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