动态获取 Android xml 个首选项文件

Get Android xml preference files dynamically

有没有办法只获取 xml 首选项文件的列表?我想像这样动态设置 sharedpreferences 默认值:

PreferenceManager.setDefaultValues(context, R.xml.somepreferencefile, true);

但是我目前有 4 或 5 个首选项文件,我希望每次添加新首选项文件时都不必 mod 代码。

我偶然发现了这个:

final Field[] fields = R.xml.class.getDeclaredFields();
// add any other files you might have added
for (int i = 0, max = fields.length; i < max; i++) {
    try {
        final int resourceId = fields[i].getInt(new R.xml());
        PreferenceManager.setDefaultValues(context, resourceId, true);
    } catch (Exception e) {
        continue;
    }
}

然而,这将提取 xml 文件夹中的所有 xml 文件,我不希望这样,因为每个文件可能都不是首选项文件。

在您将要使用的首选项 XML 文件中添加一个前缀(类似于 "pref_")。然后在您的代码中,只获取以您使用的前缀开头的 XML 文件。例如:

....
if (fields[i].getName().startsWith("pref")) {
    final int resourceId = fields[i].getInt(new R.xml());
    ...
}
....