我正在创建一个歌曲播放应用程序。我有一组保存在 SharedPreferences 中。我想从中添加和删除文件名,并保持它们与我添加它们的顺序相同,例如:
recentsp = getSharedPreferences("recentkey", Context.MODE_PRIVATE);
recent = recentsp.getStringSet("recent", recent);
recentedited = recent;
if (recentedited.contains(string) {
recentedited.remove(string);
Log.i(TAG, "Recent exists, removing song");
SharedPreferences.Editor editor = recentsp.edit();
editor.clear();
editor.putStringSet("recent", recentedited);
editor.commit();
}
recentedited.add(string);
Log.i(TAG, "adding song to recent");
SharedPreferences.Editor editor = recentsp.edit();
editor.clear();
editor.putStringSet("recent", recentedited);
editor.commit();
但是当我在 ListView 中查看这些时,问题就出现了。我希望它们按照我添加它们的顺序进行,以便我可以拥有最近播放的部分,但有时它们根本不动,或者它们可能在一开始就结束了。似乎是随机的。我错过了什么吗?
编辑:
我通过在初始化步骤中执行此操作来检查以确保 SharedPreferences 不为空...
编辑:
即使使用 LinkedHashSet 我仍然没有得到正确的排序。我只在 SharedPreferences 为空时才调用它,所以我不确定如何确保我使用的是 LinkedHashSet。
recentsp = getSharedPreferences("recentkey", Context.MODE_PRIVATE);
recent = recentsp.getStringSet("recent", null);
if (recent == null) {
recent = new LinkedHashSet<String>();
SharedPreferences.Editor editor = recentsp.edit();
editor.clear();
editor.putStringSet("recent", recent);
editor.commit();
}