【问题标题】:Android Iterate through all the preferencesAndroid 遍历所有首选项
【发布时间】:2013-02-22 14:53:16
【问题描述】:

有没有办法遍历所有偏好?
现在我正在询问每个偏好

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

【问题讨论】:

  • @baboo 你提供的那个链接很奇怪。它用于读取和解析从其中膨胀首选项的 XML。 ::: 那你误解了我的问题,我想写less代码而不是more。 ::: 但无论如何谢谢你的链接,它肯定是跳出框框思考!

标签: android iteration preferences flat


【解决方案1】:

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

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 循环遍历该列表。

【讨论】:

  • 我本身没有问题。我想也许有一些 java 系统函数可以迭代而无需编写像你我这样的代码。
  • 不,您使用递归搜索树结构,据我所知,java 无法支持此功能,您基本上希望将树数据结构展平为列表,除非已为您完成此操作已经(例如在列表的创建时间)您将不得不手动制作平面列表。
  • 这应该是android文档的标准部分,在血腥的宇宙中寻找一种方法来获取常规偏好而不是共享偏好
【解决方案2】:

您也可以使用这种方法(PreferenceFragmentCompat 中的代码):

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

一些无用的迭代,但对我的项目来说不是问题

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多