Как получить последнюю проигранную песню?

Я создаю плейлист музыкального плеера, в который недавно вошли песни. Я храню список песен и индекс песни, которая воспроизводится в общих настройках. То, что я делаю, чтобы получить недавно проигранные песни, - это извлечение массива и индекса песни из общих настроек и сохранение его в другом массиве. Но проблема в том, что 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 ответ

Вы можете сделать это через один из двух способов

  1. Перед передачей списка песен нужно отсортировать по времени. В этом случае вам также нужно сэкономить время при воспроизведении песни.(Ну, для достижения этого вам нужно много кода и его сопровождение)
  2. Это гораздо более простой способ. Вы можете использовать метод 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", а не с первой позиции, а оставшиеся элементы сдвинуты вниз. Надеюсь, что это имеет смысл.

Другие вопросы по тегам