@Jodes、実際にはどちらも正しいですが、これを行う正しい方法は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
、おそらく何か他のものを実装したくなるでしょう。
私はこの解決策を見つけました。ただし、コードをデバッグする方法についての手がかりを見つけるには、コメントを読む必要があります...