我正在创建一款歌曲播放应用程序。我有一个Set集合,保存在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();
}
HashSet
具有未定义的、类似随机的排序。如果您需要排序,请使用LinkedHashSet
;看看是否有所帮助。但是,当您特别不关心顺序时,可以使用HashSet
。 - Louis Wassermanrecentedited = new LinkedHashSet<String>(recent)
可以实现你想要的效果。recentedited = recent
没有任何有用的作用。 - Louis Wasserman