1

最近、曲を再生した音楽プレーヤーのプレイリストを作成しています。私は、曲のarraylistと共有の設定で再生されている曲のインデックスを格納しています。私が最近演奏した曲を手に入れようとしているのは、共有の設定からarraylistと曲のインデックスを取得し、別のarraylistに保存することです。しかし、問題はrecyclerViewが一度に1つの曲だけを表示することです。最新の曲を取り出す方法は?

例:私がA曲を演奏した場合、recyclerViewは最初の位置に曲Aを表示し、次にB曲を再生すると、recyclerViewは曲Bを最初の位置に、曲Aを2番目の位置に表示する必要があります。しかし、それは最初の位置を示すだけです。

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); 

} 
+0

これは、ソングbを再生するときに配列の2番目の位置に追加することを意味しますか? –

+0

曲Bが再生されているときに曲Aが2番目の位置に追加され、曲Bが通常の音楽プレーヤーのように最初の位置に追加されます。 – Rektirino

答えて

0

あなたは時間に応じてソートする必要がある曲のリストを渡す前に二つの方法

  1. の1以下を経由して、これを行うことができます。この場合、曲を再生するときに時間を節約する必要があります(これを達成するには、多くのコーディングとメンテナンスが必要です)
  2. これははるかに簡単な方法です。 add()の配列リストのメソッドを使用することができます。また、次のコードでも述べるように位置を指定することができます。

    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'インデックスでは、それは最初の位置にあり、リマイングアイテムはプッシュダウンされていません。希望はある意味があります。

+0

私が言ったように、私はarraylistのadd()メソッドを使用しています最新の曲を最初に追加します。以前の曲は、recyclerViewの下に表示されません。あなたが私のポイントを得ることを願っています。 – Rektirino

+0

私が言及したように、私はaddメソッドを使用していますが、あなたが最初の位置にあなたの曲を追加し、残りの曲が自動的に最初の曲の下にプッシュされるようにしようとすると同様に位置を指定しています。試してみる。それから私に知らせてください –

+0

私はそれを前に試しました。成功しなかった。歌だけが追加されます。 – Rektirino

関連する問題