У меня есть активность, известная как ArtistActivity
, которая содержит RecylerView. В представлении Recycler ArtistActivity
я загружаю список песен, как будто я загружаю URL-адрес песни и название песни из моей базы данных Firebase. Когда пользователь щелкает песню, он отправляет URL-адрес песни в другое действие, известное как SongPlayingActivity. Мой SongPlayingActivity
, который берет URL-адрес и воспроизводит песню с помощью Media Player. Мой главный вопрос, у меня есть следующая кнопка в My SongPlayingActivity
, и я хочу загрузить следующую песню, когда пользователь нажимает следующую кнопку. Как, если пользователь нажимает кнопку Next, он останавливает предыдущую песню и загружает следующую песню. из SongList. Очень похоже на то, как это работает в Spotify.
Надеюсь, вы понимаете мой вопрос и, пожалуйста, ответьте мне, если у вас есть какое-либо решение.
Вот мой код: -
ArtistActivity
public class ArtistActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ValueEventListener eventListener;
private DatabaseReference mDataRef, artist_ref;
private List<PanelList> mList;
private PanelAdapter panelAdapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.artist1layout);
mRecyclerView = findViewById(R.id.artist_song_recyclerview);
mDataRef = FirebaseDatabase.getInstance().getReference("ArtistView").child(getIntent().getStringExtra("Artist"))
.child("Songs");
mRecyclerView.setHasFixedSize(true);
mDataRef.keepSynced(true);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mList = new ArrayList<>();
panelAdapter = new PanelAdapter(ArtistActivity.this, mList);
mRecyclerView.setAdapter(panelAdapter);
eventListener = mDataRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mList.clear();
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
PanelList list = postSnapshot.getValue(PanelList.class);
mList.add(list);
}
panelAdapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
}
Класс адаптера: -
public class PanelAdapter extends RecyclerView.Adapter<PanelAdapter.PanelViewHolder> {
private Context mContext;
private List<PanelList> mUploads;
public PanelAdapter(Context context, List<PanelList> panelList) {
mContext = context;
mUploads = panelList;
}
@NonNull
@Override
public PanelViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.artist_recycler_layout, parent, false);
return new PanelViewHolder(v);
// Toast.makeText(mContext, "" + ge, Toast.LENGTH_SHORT).show();
}
@Override
public void onBindViewHolder(@NonNull PanelViewHolder holder, int position) {
PanelList panelList = mUploads.get(position);
holder.textViewName.setText(panelList.getSongName());
Glide.with(mContext)
.load(panelList.getSongImageUri())
.centerCrop()
.into(holder.circleImageView);
holder.thisLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String url = panelList.getSongUrl();
Intent playSongActivity = new Intent(mContext, D.class);
playSongActivity.putExtra("SongUrl", panelList.getSongUrl());
mContext.startActivity(playSongActivity);
}
});
}
@Override
public int getItemCount() {
return mUploads.size();
}
public class PanelViewHolder extends RecyclerView.ViewHolder {
private LinearLayout thisLayout;
public PanelViewHolder(@NonNull View itemView) {
super(itemView);
thisLayout = itemView.findViewById(R.id.artist_linear);
}
}
}
Класс воспроизведения моей песни: -
public class D extends AppCompatActivity {
public static SeekBar mSeekbar;
public static ImageView Play_Icon_D;
private Button next_button;
// private Button popup_button;
private TextView Song_D, Artist_D;
private Integer currentIndex;
private List<PanelList> panelList;
private Bundle bundle;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_song_playing);
mSeekbar = findViewById(R.id.seekbar);
Play_Icon_D = findViewById(R.id.play_icon_D_class);
Song_D = findViewById(R.id.song_info_song_D);
Artist_D = findViewById(R.id.song_info_artist_D);
next_button = findViewById(R.id.D_next_button);
bundle = getIntent().getExtras();
panelList = bundle.getParcelableArrayList("SongUrls");
currentIndex = bundle.getInt("currentPlayingIndex");
playSong();
next_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String newUrl = panelList.get(currentIndex).getSongName();
currentIndex = currentIndex + 1;
// Toast.makeText(D.this, newUrl, Toast.LENGTH_SHORT).show();
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference reference = storage.getReferenceFromUrl(panelList.get(currentIndex).getSongUrl());
reference.getDownloadUrl().addOnFailureListener(uri -> C.getInstance().play(uri.toString()));
}
});
}
private void playSong() {
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference reference = storage.getReferenceFromUrl(panelList.get(currentIndex).getSongUrl());
reference.getDownloadUrl().addOnFailureListener(uri -> C.getInstance().play(uri.toString()));
}
}