2011-04-19 51 views
0

我正在構建一個應用程序,當我需要顯示一個設置屏幕時,用戶可以檢查哪些項目將在主要活動的列表視圖中顯示。Android - 如何設置CheckBoxPreference的值?要麼?

我正在解析這些類別的XML,所以PreferenceScreen以編程方式完成,並且所有CheckBoxPreferences都構建在一個循環中。代碼:

try { 
    URL url = new URL("http://www.someurl.com/phone/categories.php"); 

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dbf.newDocumentBuilder(); 
    Document doc = db.parse(new InputSource(url.openStream())); 
    doc.getDocumentElement().normalize(); 

    NodeList nodeList = doc.getElementsByTagName("category"); 

    for (int i = 0; i < nodeList.getLength(); i++) {     
     Element category = (Element)nodeList.item(i); 

     Node id = category.getElementsByTagName("id").item(0); 
     Node title = category.getElementsByTagName("name").item(0); 

     CheckBoxPreference togglePref = new CheckBoxPreference(this); 
     togglePref.setKey("category_" + id.getChildNodes().item(0).getNodeValue()); 
     togglePref.setDefaultValue(true); 
     togglePref.setTitle(title.getChildNodes().item(0).getNodeValue()); 
     root.addPreference(togglePref); 
    } 
} catch(Exception ex) { 
    Log.e(this.getClass().getSimpleName(), ex.getMessage()); 
} 

其中rootPreferenceScreen對象。

我的問題是,我不僅需要爲一個複選框選項存儲標題,而且還需要存儲該類別的標識,但在CheckBoxPreference對象中沒有此類屬性。

我的問題是,如果有另一種解決方法,或者我應該延長CheckBoxPreference類,並創建一些自定義MyCheckBoxPreference,也將存儲其他的「價值」?

我的願景是與普通的HTML複選框具有相似的(或相同的) - 雖然它沒有設置(提交)的值,如果複選框沒有被選中,而另一方面被選中時獲得具體的值而不是隻是真/假...

AFAIK CheckBoxPreference只有狀態選中/未選中,而沒有值可以返回。

我在想,我正好被設置爲具體cetagories而不是category_<ID>和ID的首選項鍵,然後調用sharedPreferences.getAll() - 我想到只檢查CheckBoxPreferences應返回,然後通過他們的密鑰的獲得我應該能夠運行與類別ID ...這可能是一個簡單的解決方案和好辦法?

非常感謝任何適當的建議!

回答

1

我的問題是,我需要存儲不僅一個複選框選項的標題,但我也需要存儲的類別的ID,但CheckBoxPreference對象中沒有這樣的屬性。

恕我直言,這就是關鍵所在。

我在想,我正好被設置爲具體cetagories而不是category_的ID選項鍵,然後調用sharedPreferences.getAll() - 我想到只檢查CheckBoxPreferences應該由他們的鍵獲取返回,然後我應該能夠使用類別ID進行操作......這可能是一個簡單的解決方案和好方法嗎?

您將獲得所有已被用戶觸摸的對象,無論它們是已選中還是未選中。這可能是正確的方法。

+0

好的,我認爲關鍵是像一個首選唯一標識符,不是它的價值......但我會試一試... – shadyyx 2011-04-19 23:23:26

+0

@shadyyx:這是首選唯一標識符。但是,對於布爾狀態,您不需要標識符以及是否檢查其他「值」。 – CommonsWare 2011-04-19 23:31:58

+0

@CommonsWare可以根據條件改變複選框的狀態,而不是用戶是否點擊它? – 2016-05-28 05:05:25