Хорошо @Джодес, на самом деле вы оба правы, но правильный способ сделать это - использовать ListPreference
.
Я бы использовал весь программный подход, из моего опыта легче быть последовательным; Либо создайте полный макет XML с помощью кода, либо с помощью XML, но смешивание 2 может быть странным, и вы не можете изменить все, что установлено с помощью XML ...
onCreate(){
this.setPreferenceScreen(createPreferenceHierarchy());
}
public PreferenceScreen createPreferenceHierarchy(){
PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);
// category 1 created programmatically
PreferenceCategory cat1 = new PreferenceCategory(this);
cat1.setTitle("title");
root.addPreference(cat1);
ListPreference list1 = new ListPreference(this);
list1.setTitle(getResources().getString(R.string.some_string_title));
list1.setSummary(getResources().getString(R.string.some_string_text));
list1.setDialogTitle(getResources().getString(R.string.some_string_pick_title));
list1.setKey("your_key");
CharSequence[] entries = calendars.getCalenders(); //or anything else that returns the right data
list1.setEntries(entries);
int length = entries.length;
CharSequence[] values = new CharSequence[length];
for (int i=0; i<length; i++){
CharSequence val = ""+i+1+"";
values[i] = val;
}
list1.setEntryValues(values);
cat1.addPreference(list1);
return root;
}//end method
Однако, используя этот подход, вы столкнетесь с ограничениями платформы отсутствием множественного выбора ListPreference
, и, возможно, вам захочется реализовать что-то еще.
Я нашел это решение, которое прекрасно работает. Вы должны будете прочитать комментарии, чтобы найти подсказки о том, как отладить код, хотя ...