2011-05-25 2 views
18

На моей странице настроек у меня есть предпочтение, которое извлекает список переключаемых параметров, которые я хотел бы отображать как индивидуальные настройки флажка.Программно населяющие предпочтения с помощью флажков

Я знаю, что preferences.xml поддерживает создание списков предпочтений (смотри страницу настроек wi-fi), но ListPreference позволяет только выбрать один из списка.

Я искал способ создания предпочтений программным способом, но только смог найти способ изменения атрибутов предпочтений, уже находящихся в XML.

+2

Если вам нужен только список нескольких вариантов, взгляните на [MultiSelectListPreference] (http://developer.android.com/reference/android/preference/MultiSelectListPreference.html) – Jokahero

ответ

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

+0

Рад, что это было полезно :) – inazaruk

+2

Чтобы мой PreferenceFragment фактически использовал PreferenceScreen, мне пришлось вызвать 'setPreferenceScreen (screen);' также. – ndsc

1

Programatically добавить предпочтение, с другими предпочтениями в 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); 

Sidenote: Так как мне нужно, чтобы создать динамический список флажок, он лучше всего подходит внутри внутренней PreferenceScreen. Поэтому я создал этот PreferenceScreen внутри xml, а затем динамически генерировал флажки внутри этого. Таким образом, упорядочение не имело значения, так как все флажки «new» dynamic были внутри этого экрана.

+0

Смешивание предпочтений из xml и программно очень сбивает с толку. Все предпочтения могут быть созданы программно и лично, я думаю, что программный подход гораздо удобнее, чем метод xml – slinden77

Смежные вопросы