如何在recyclerView(没有按钮)中单击项目时播放歌曲?

问题描述 投票:0回答:1

我正在创建一个音乐应用程序,我在RecyclerView中列出了我的歌曲。我想要的是当我点击任何一首歌(在红色标记区域内)时,该歌曲应该播放,就像在现代音乐播放器中一样。我不想在我的RecyclerView上播放,停止按钮。任何帮助,将不胜感激!提前致谢!

YO

songs.Java

public class Songs extends Fragment  {


private static final String TAG = "Songs";
RecyclerView recyclerView;
private ArrayList<SongInfoModel> SongList = new ArrayList<SongInfoModel>();
SongAdapter songAdapter;
SongInfoModel s;
private MediaPlayer mediaPlayer;
ScaleInAnimationAdapter alphaAdapter;




@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.songs_activity, container, false);
    recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
    mediaPlayer = new MediaPlayer();

   LinearLayoutManager linearLayoutManager = new 
   LinearLayoutManager(getContext());
   recyclerView.setLayoutManager(linearLayoutManager);

   SongInfoModel s= new SongInfoModel("Cheap Thrills","Sia",null, null, 
   "http://mp3fb.com/wp-includes/inc/down.php?
    id=hyCQomZzosfGBvVON0tRV7xfiL2GdtKXbTsBrZh_3NM&t=Sia%2B-
    %2BCheap%2BThrils%2B%D0%A0%D0%B5%D0%BC%D0%B8%D0%BA%D1%81.mp3
    &hash=true",null,null);
    SongList.add(s);
    songAdapter = new SongAdapter(getContext(),SongList);
   alphaAdapter = new ScaleInAnimationAdapter(songAdapter);
   alphaAdapter.setDuration(1000);
   alphaAdapter.setInterpolator(new OvershootInterpolator());
   alphaAdapter.setFirstOnly(false);
   recyclerView.setAdapter(alphaAdapter);

   Collections.sort(SongList, new Comparator<SongInfoModel>(){
       public int compare(SongInfoModel a, SongInfoModel b){
           return a.getSongName().compareTo(b.getSongName());
       }
   });


   return view;
}

song adapter.Java:

  public class SongAdapter extends 
                                RecyclerView.Adapter<SongAdapter.SongHolder> 
 {

ArrayList<SongInfoModel> SongList = new ArrayList<>();
Context context;
MediaPlayer mediaPlayer;
SongInfoModel obj;



public SongAdapter(Context context, ArrayList<SongInfoModel> SongList) {

    this.context = context;
    this.SongList = SongList;

}


@Override
public SongAdapter.SongHolder onCreateViewHolder(ViewGroup parent, int 
                                                               viewType) 
   {
    View view = LayoutInflater.from(context).inflate(R.layout.row_song, 
                                                         parent, false);
    return new SongHolder(view);
}

   @Override
  public void onBindViewHolder(final SongAdapter.SongHolder holder, final 
  int 
   position) {

    final SongInfoModel songInfoModel = SongList.get(position);
    holder.songName.setText(songInfoModel.SongName);
    holder.artistName.setText(songInfoModel.ArtistName);

}

@Override
public int getItemCount() {
    return SongList.size();
}

public class SongHolder extends RecyclerView.ViewHolder  {
    TextView songName;
    TextView artistName;
    TextView duration;


    public SongHolder(View itemView)    {

        super(itemView);
        songName = (TextView)itemView.findViewById(R.id.SongName);
        artistName= (TextView)itemView.findViewById(R.id.ArtistName);
        duration = itemView.findViewById(R.id.duration);

    }

 }

}
android-recyclerview android-mediaplayer onclicklistener audio-player
1个回答
0
投票

首先,在Adapter类中创建一个这样的接口 -

private CustomOnClickListener customOnClickListener;

public interface CustomOnClickListener{
    void onClick(int position);
}

之后在View holder类中实现View.OnClickListener

    class TracksViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{


    public TracksViewHolder(View itemView) {
        super(itemView);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

        customOnClickListener.onClick(getAdapterPosition());

    }

之后在Fragment或Activity类中实现CustomOnClickListener。

© www.soinside.com 2019 - 2024. All rights reserved.