我试图实施"最近播放"我的音乐播放器中的播放列表,显示最近由用户播放的那些歌曲(在recyclerView中)。但我的代码所做的是,它只存储最后播放的歌曲。
我想要的是:如果我的音乐播放器中有2首歌曲,请说A和B.我先播放歌曲A.然后它应该被添加到最近播放的列表(在第一个位置)。之后,如果我播放歌曲B,它也应该被添加到列表中(不替换A)但是按下A并且B占据第一个位置。因此,最终列表应如下所示:B位于顶部,A位于其下方。
我的应用程序做了什么:如果我先播放歌曲A然后播放歌曲B,如果我去最近播放的列表播放两者之后,我可以在那里看到两首歌曲。如果我先播放歌曲A然后转到最近播放的列表它就在那里,在回来之后我播放歌曲B然后转到最近播放的列表它只显示歌曲B.在后一种情况下,两者都应该被看到,但它不是。我想每次都会创建一个新阵列。
代码:
public void storeAudioPlaylist(SongInfoModel songInfoModel) {
preferences = context.getSharedPreferences(STORAGE,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
Gson gson = new Gson();
playlistStore.add(songInfoModel);
String json = gson.toJson(playlistStore);
editor.putString("audioPlayList", json);
editor.apply();
}
public ArrayList<SongInfoModel> loadAudioPlaylist() {
preferences = context.getSharedPreferences(STORAGE,
Context.MODE_PRIVATE);
Gson gson = new Gson();
String json = preferences.getString("audioPlayList", null);
Type type = new TypeToken<ArrayList<SongInfoModel>>() {
}.getType();
return gson.fromJson(json, type);
}
以上2个函数用于将歌曲对象存储到数组并分别检索数组。
代码:
public void onClickListener(SongInfoModel song, int position) {
storageUtil.storeAudioPlaylist(song); // this calls the method and passes
the song model(ID,name,artist..etc)
}