2011-06-07 50 views
12

我目前正在使用來自Web服務的內容動態地構建出帶有複選框的行列表。然而,這ListView將需要做幾乎PreferenceActivity會完成。動態創建CheckBoxPreferences

由於內容是動態的,我不知道行數,因此我無法在XML中創建每個CheckBoxPreference。我該如何着手構建一個PreferenceActivity,它將動態顯示一個CheckBoxPreference的未知數字行?

回答

0

您需要一個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

+1

感謝您的快速響應。此列表是爲了保存偏好。此列表中的項目是應用內容的過濾器設置,這些過濾器是從Web服務中提取的。別介意這個應用程序的工作原理,我只需要知道如何在每行中用CheckBoxPreferences以編程方式正確構建動態PreferenceActivity。這聽起來像只使用我知道的ListView,但如果可以使用首選項來完成,它會爲我節省一段時間,因爲那就是它需要的功能。標題爲 – askilondz 2011-06-08 03:06:34

27

我認爲您正在尋找類似的東西:

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); 
    } 
} 
+0

:checkBoxPreference.setTitle(「my title」); – Ranjit 2014-03-31 09:36:22

7

@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解決方案,這很好。你必須閱讀評論找到有關如何調試儘管代碼線索......

+2

這是要走的路。 – 2013-07-18 15:07:49

+1

你剛剛完成了我的整個一天。清楚的答案,並顯示更多與PreferenceCategory與一個列表。謝謝! – Shadoath 2016-01-23 18:22:28