ilomambo
ilomambo

Reputation: 8350

Android Iterate through all the preferences

Is there a way to iterate flat over all the preferences?
Right now I am asking for each preference

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 ...
    }
}

I would like to do it this way:

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

Upvotes: 2

Views: 2964

Answers (2)

j2esu
j2esu

Reputation: 1687

You also can use this approach (code inside PreferenceFragmentCompat):

for (String key : getPreferenceScreen().getSharedPreferences().getAll().keySet()) {
    Preference p = findPreference(key);
    if (p != null) //do smth with pref
}

Some useless iterations, but it's not a problem for my project

Upvotes: 1

Eluvatar
Eluvatar

Reputation: 2295

I'm not sure I see your problem with iterating though it this way, but if you want you could implement the following

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;
}

this would allow you to make a flat preference list and then iterate through that list with a foreach loop.

Upvotes: 7

Related Questions