я думаю, вопрос больше в том, почему
PreferenceManager.getDefaultSharedPreferences(this).getAll()
возвращает пустую / противоречащую карту, чем с помощью итерации по стандартной карте Java. андроид документ на самом деле не кристально ясно о том, что происходит здесь , но в основном это кажется, что первый вызов когда - либо в
PreferenceManager.setDefaultValues(this, R.xml.preferences,false)
- это то, что вы должны вызывать для инициализации предпочтений при запуске приложения - создает своего рода кешированную версию ваших предпочтений, которая вызывает несогласованную обработку будущих изменений в вашем файле предпочтений xml, то есть вызывает несоответствие вам описано в вашем вопросе.
чтобы сбросить этот «кэшированный объект», выполните следующие действия (которые вы можете получить по ссылке выше):
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().clear();
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);