曲再生アプリを作成しています。SharedPreferences に保持する Set があります。ファイル名を追加および削除し、追加したときと同じ順序に保ちたいと思います。たとえば、次のようにします。
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 が null でないことを確認します...
編集:
LinkedHashSet を使用しても、適切な順序付けができません。SharedPreferences が null の場合にのみこれを呼び出すため、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();
}