2013-02-22 99 views
1

有沒有一種方法可以迭代所有首選項?
現在我要求每個偏好Android通過所有首選項迭代

private void doSomething(Preference p) { 
    if(p instanceof PreferenceCategory || p instanceof PreferenceScreen) { 
     PreferenceGroup pGroup = (PreferenceGroup) p; 
     int pCount = pGroup.getPreferenceCount(); 
     for(int i = 0; i < pCount; i++) { 
      doSomething(pGroup.getPreference(i)); // recursive call 
     } 
    } else { 
     ... process single preference ... 
    } 
} 

我想這樣來做:

int pCount = getTotalPreferenceCount(); 
for(int i = 0; i < pCount; i++) { 
    // process getFlatPreference(i); 
} 
+0

http://stackoverflow.com/questions/6672949/get-all-sharedpreferences-names-and-all-their-keys – baboo 2013-02-22 15:02:54

+0

@baboo你給的鏈接很奇怪。它用於讀取和解析偏好從中膨脹的XML。 :::然後你錯誤理解我的問題,我想寫**少**代碼不**更多**。 :::但無論如何感謝你的鏈接,它絕對是在盒子外面思考! – ilomambo 2013-02-22 20:10:52

回答

2

我不知道我看到你的問題與迭代雖然這樣,但如果你願意,你可以實現以下

private void callingMethod(){ 
    ArrayList<Preference> list = getPreferenceList(prefScreen, new ArrayList<Preference>()); 
    for (Preference p : list) { 
     doSomething(p); 
    } 
} 

private ArrayList<Preference> getPreferenceList(Preference p, ArrayList<Preference> list) { 
    if(p instanceof PreferenceCategory || p instanceof PreferenceScreen) { 
     PreferenceGroup pGroup = (PreferenceGroup) p; 
     int pCount = pGroup.getPreferenceCount(); 
     for(int i = 0; i < pCount; i++) { 
      getPreferenceList(pGroup.getPreference(i), list); // recursive call 
     } 
    } else { 
     list.add(p); 
    } 
    return list; 
} 

,這將讓你做出一個平坦的首選項列表,然後通過該列表與foreac迭代h循環。

+0

本人沒有問題。我認爲也許有java系統函數可以迭代,而不必像你或我的那樣編寫代碼。 – ilomambo 2013-02-22 20:06:48

+0

不,你用遞歸搜索樹結構,據我所知沒有辦法,Java支持這一點,你基本上想要扁平化樹形數據結構到列表中,除非已經爲你完成了(說創建時間爲該列表),你將不得不手動製作平板列表。 – Eluvatar 2013-02-26 17:02:01