我试图实施"最近播放"我的音乐播放器中的播放列表,显示最近由用户播放的那些歌曲(在recyclerView中)。但我的代码所做的是,它只存储最后播放的歌曲。
我想要的: 如果我的音乐播放器中有2首歌曲,则说A和B.我先播放歌曲A.然后它应该被添加到最近播放的列表(在第一个位置)。之后,如果我播放歌曲B,它也应该被添加到列表中(不替换A)但是按下A并且B占据第一个位置。因此,最终列表应如下所示:B位于顶部,A位于其下方。
但我的应用程序做了什么: ONly存储最后播放并替换其他任何内容,即如果我播放歌曲B播放歌曲A,歌曲A将被歌曲B替换,并且列表中只有一首歌曲。
最后我的问题如上所述,app只存储一首歌曲(最后一首歌曲)。顺便说一句,我正在使用共享偏好。
代码:
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)
}