我目前正在使用來自Web服務的內容動態地構建出帶有複選框的行列表。然而,這ListView
將需要做幾乎PreferenceActivity
會完成。動態創建CheckBoxPreferences
由於內容是動態的,我不知道行數,因此我無法在XML中創建每個CheckBoxPreference
。我該如何着手構建一個PreferenceActivity
,它將動態顯示一個CheckBoxPreference
的未知數字行?
我目前正在使用來自Web服務的內容動態地構建出帶有複選框的行列表。然而,這ListView
將需要做幾乎PreferenceActivity
會完成。動態創建CheckBoxPreferences
由於內容是動態的,我不知道行數,因此我無法在XML中創建每個CheckBoxPreference
。我該如何着手構建一個PreferenceActivity
,它將動態顯示一個CheckBoxPreference
的未知數字行?
您需要一個ListView
那個,一個PreferenceActivity
。正如在this link中討論的那樣,PreferenceActivity
應該僅用於實際保存偏好。
相反,你既可以創建一個簡單的對話框,其中一個或多個選擇的選項: http://developer.android.com/guide/topics/ui/dialogs.html
或者使用ListView
作爲API的例子谷歌提供,他們舉一個簡單的例子:
http://hi-android.info/docs/resources/samples/ApiDemos/src/com/example/android/apis/view/List10.html
我認爲您正在尋找類似的東西:
public class MyPreferenceActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.my_preference_activity);
//fetch the item where you wish to insert the CheckBoxPreference, in this case a PreferenceCategory with key "targetCategory"
PreferenceCategory targetCategory = (PreferenceCategory)findPreference("targetCategory");
//create one check box for each setting you need
CheckBoxPreference checkBoxPreference = new CheckBoxPreference(this);
//make sure each key is unique
checkBoxPreference.setKey("keyName");
checkBoxPreference.setChecked(true);
targetCategory.addPreference(checkBoxPreference);
}
}
:checkBoxPreference.setTitle(「my title」); – Ranjit 2014-03-31 09:36:22
@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
,你可能會想要實現別的東西。
我找到了this解決方案,這很好。你必須閱讀評論找到有關如何調試儘管代碼線索......
這是要走的路。 – 2013-07-18 15:07:49
你剛剛完成了我的整個一天。清楚的答案,並顯示更多與PreferenceCategory與一個列表。謝謝! – Shadoath 2016-01-23 18:22:28
使用PreferenceFragmentCompat從偏好COMPAT圖書館
編譯「com.android.support:preference-v7:23.4.0 '
查看此文的實施細節https://medium.com/@arasthel92/dynamically-creating-preferences-on-android-ecc56e4f0789#.71ssvjses
感謝您的快速響應。此列表是爲了保存偏好。此列表中的項目是應用內容的過濾器設置,這些過濾器是從Web服務中提取的。別介意這個應用程序的工作原理,我只需要知道如何在每行中用CheckBoxPreferences以編程方式正確構建動態PreferenceActivity。這聽起來像只使用我知道的ListView,但如果可以使用首選項來完成,它會爲我節省一段時間,因爲那就是它需要的功能。標題爲 – askilondz 2011-06-08 03:06:34