Android 遍历所有首选项

ilo*_*mbo 2 iteration android preferences flat

有没有办法对所有偏好进行平面迭代?
现在我要求每个偏好

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 ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这样做:

int pCount = getTotalPreferenceCount();
for(int i = 0; i < pCount; i++) {
    // process getFlatPreference(i);
}
Run Code Online (Sandbox Code Playgroud)

Elu*_*tar 5

我不确定我是否看到您以这种方式进行迭代的问题,但是如果您愿意,可以实施以下操作

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;
}
Run Code Online (Sandbox Code Playgroud)

这将允许您制作一个平面首选项列表,然后使用 foreach 循环遍历该列表。