Программно заполняющие предпочтения с помощью флажков
На моей странице настроек у меня есть предпочтение, которое извлекает список переключаемых параметров, которые я хотел бы отображать как индивидуальные настройки флажка.
Я знаю, что preferences.xml
поддерживает создание списков предпочтений (просмотр страницы настроек wi-fi), но ListPreference
позволяет выбрать только один из списка.
Я искал способ создания предпочтений программным способом, но мне удалось найти способ изменения атрибутов предпочтений, уже находящихся в XML.
Ответы
Ответ 1
Вот краткий пример (предполагая, что вы расширяете 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);
}
Ответ 2
Программно добавить предпочтение с другими настройками в файле xml:
Другие решения не работали для меня, потому что у меня также был xml с предпочтениями. Я не уверен, что все эти вызовы являются необходимыми/избыточными, но это работает.
onCreate() метод, класс extends 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 были внутри этого экрана.