2013-02-22 69 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