I have a recyclerview which has 2 imageviews for play and stop button inside a cardview. i am using onclick method to change play image to pause via setImageSrouce. My problem is that i am not able to change previous row's imageview back to play button upon clicking on any other row's image button (Play image). It would be great if someone could help solve this.
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
private static final String TAG = "RecyclerViewAdapter";
private ArrayList<String> songnames=new ArrayList<>();
private ArrayList<Integer> mFlag=new ArrayList<>();
private ArrayList<Integer> song=new ArrayList<>();
private ArrayList<Integer> mplay=new ArrayList<>();
private ArrayList<Integer> mstop=new ArrayList<>();
private ArrayList<Integer> mpause=new ArrayList<>();
MediaPlayer player;
public static int path;
ArrayList<Integer> msong, ArrayList<Integer> mplay,ArrayList<Integer> mstop
private Context mcontext;
int i=0;
private ArrayList<ItemData> itemData;
private int position;
private Object payload;
public RecyclerViewAdapter(Context mcontext, ArrayList<String> msongnamesnames, ArrayList<Integer> flag, ArrayList<Integer> msong, ArrayList<Integer> mplay, ArrayList<Integer> mstop, ArrayList<Integer> pause) {
this.mcontext = mcontext;
this.songnames = msongnamesnames;
this.mFlag = flag;
this.song=msong;
this.mplay=mplay;
this.mstop=mstop;
this.mpause=pause;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view= LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_list_item,viewGroup,false);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {
viewHolder.songname.setText(songnames.get(position));
viewHolder.flag.setImageResource(mFlag.get(position));
viewHolder.play.setImageResource(mplay.get(position));
viewHolder.stop.setImageResource(mstop.get(position));
viewHolder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
path=song.get(position);
play(v, viewHolder, position);
Log.d(TAG, "onClick: position is " + mpause);
}
});
viewHolder.stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopPlayer(viewHolder, position);
}
});
}
public boolean checkimage(ViewHolder viewHolder) {
String imagename= viewHolder.play.getResources().getResourceEntryName(R.id.playbutton);
return true;
}
@Override
public int getItemCount() {
return songnames.size() ;
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView songname;
ImageView flag;
ImageView play;
ImageView stop;
public ViewHolder(@NonNull View itemView) {
super(itemView);
songname=itemView.findViewById(R.id.songname);
flag=itemView.findViewById(R.id.FlagHolder);
play=itemView.findViewById(R.id.playbutton);
stop=itemView.findViewById(R.id.stopbutton);
}
}
public void play(View v, final ViewHolder viewHolder, final int position) {
if(player!=null) {
Log.d(TAG, "Here position is" + position );
player.release();
player = null;
for(int i=0; i<songnames.size(); i++) {
viewHolder.play.setImageResource(mplay.get(i));
}
}
if (player == null) {
player = (MediaPlayer) MediaPlayer.create(mcontext, path);
viewHolder.play.setImageResource(mpause.get(position));
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stopPlayer(viewHolder, position);
}
});
}
player.start();
}
public void pause(View v) {
if (player != null) //is called to check a user is pressing the pause button which started the song
{
player.pause();
}
}
public void stop(ViewHolder viewHolder, int position) {
stopPlayer(viewHolder, position);
}
private void stopPlayer(ViewHolder viewHolder, int position) {
viewHolder.play.setImageResource(mplay.get(position));
if (player != null) {
player.release();
player = null;
Toast.makeText(mcontext, "MediaPlayer released", Toast.LENGTH_SHORT).show();
}
}
}