Как получить последнюю проигранную песню?
Я создаю плейлист музыкального плеера, в который недавно вошли песни. Я храню список песен и индекс песни, которая воспроизводится в общих настройках. То, что я делаю, чтобы получить недавно проигранные песни, - это извлечение массива и индекса песни из общих настроек и сохранение его в другом массиве. Но проблема в том, что recyclerView отображает только одну песню за раз.
Например, если я проиграл песню A, recyclerView должен показывать мне песню A в первой позиции, затем, если я играю песню B, recyclerView должен показывать песню B в первой позиции и песню A во второй позиции. Но это показывает только первую позицию.
RecentlyPLayedsongs.java
:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = LayoutInflater.from(this);
View view6 = inflater.inflate(R.layout.activity_recently_played, null);
FrameLayout container6 = (FrameLayout) findViewById(R.id.container);
container6.addView(view6);
recyclerView_recently_played = findViewById(R.id.recyclerView_recently_played);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView_recently_played.setLayoutManager(linearLayoutManager);
StorageUtil storageUtil2 = new StorageUtil(getApplicationContext());
SongList=storageUtil2.loadAudio();
pos = storageUtil2.loadAudioIndex();
songInfoModel = SongList.get(pos);
RecentlyPlayedList.add(songInfoModel);
adapter1 = new Playlist_Recently_Added_Adapter(RecentlyPlayedList, getApplicationContext());
recyclerView_recently_played.setAdapter(adapter1);
}
1 ответ
Вы можете сделать это через один из двух способов
- Перед передачей списка песен нужно отсортировать по времени. В этом случае вам также нужно сэкономить время при воспроизведении песни.(Ну, для достижения этого вам нужно много кода и его сопровождение)
Это гораздо более простой способ. Вы можете использовать метод add() списка Array, и вы можете указать позицию там, как указано ниже в коде
list.add(o, currentSong);
Здесь 0 пропускается, что означает, что когда вы играете песню, которая будет добавлена с индексом 0, это означает, что ваша последняя сыгранная песня всегда будет на вершине. Надеюсь, это поможет вам.
ПРИМЕЧАНИЕ: я проверил второе решение с приведенным ниже кодом, который работает как ожидалось
List<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
Log.d(TAG, "firs time");
for (int a=0; a < list.size();a++ ) {
Log.d(TAG, "" + list.get(a));
}
list.add(0,4);
Log.d(TAG, "second time");
for (int a=0; a < list.size();a++ ) {
Log.d(TAG, "" + list.get(a));
}
Журналы были, как указано ниже
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: firs time
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 1
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 2
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 3
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: second time
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 4
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 1
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 2
11-19 11:24:53.400 3681-3681/com.example.awaheed.datetime D/test: 3
Взгляните на журнал второго номера времени, который был добавлен с индексом "0", а не с первой позиции, а оставшиеся элементы сдвинуты вниз. Надеюсь, что это имеет смысл.