有没有办法在所有首选项上进行迭代? 现在我要求每个偏好
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 :(得分:4)
我不确定我是否通过这种方式迭代问题,但如果你想要,你可以实现以下
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;
}
这将允许您创建一个平面首选项列表,然后使用foreach循环遍历该列表。
答案 1 :(得分:0)
您还可以使用这种方法(PreferenceFragmentCompat中的代码):
for (String key : getPreferenceScreen().getSharedPreferences().getAll().keySet()) {
Preference p = findPreference(key);
if (p != null) //do smth with pref
}
一些无用的迭代,但这对我的项目来说不是问题