【已解决】 如何在recycleview中点击一个item中的播放按钮,让其他的item中的按钮复位,也就是改变背景图片
   在写毕设的过程中,想要实现如图,在recycleview中每个item都有一个播放按钮,播放属于自己的那一段音频。正常应该是点击第一个在播放过程中时,点击第二个就会停止第一个,然后播放第二个,但是现在虽然可以立马停止,但是imagebutton的改变跟不上,我在网上搜索得到,说notifyitemchange,可以刷新,但是在模拟器中也只有第一次生效,而在我的手机上则第一次也没有成功变化图标,所以想请问大神们,这个功该如何实现,下面是我的recycleview中adapter的实现。
public class RecordDdapter extends RecyclerView.Adapter<RecordDdapter.ViewHolder> {
    private static final String TAG = "adapter";
    private List<RecordData> mRecordData ;
    private Context mContext;
    private MediaPlayer player ;
    private boolean mStartPlaying = true;
    private int mposition;
    public RecordDdapter(Context context,List<RecordData> recordData) {
        mContext = context;
        mRecordData = recordData;
    }
    static class ViewHolder extends RecyclerView.ViewHolder{
        TextView date;
        ImageButton startbutton;
        TextView noisetime;
        TextView averagedb;
        TextView maxdb;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            date = itemView.findViewById(R.id.date);
            noisetime = itemView.findViewById(R.id.noise_time);
            averagedb = itemView.findViewById(R.id.average_db);
            maxdb = itemView.findViewById(R.id.max_db);
            startbutton = itemView.findViewById(R.id.play);
        }
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout,parent,false);
        ViewHolder viewHolder =new ViewHolder(view);
        return viewHolder;
    }
    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") int position) {
        RecordData recordData = mRecordData.get(position);
        holder.date.setText(recordData.getMdate());
        holder.maxdb.setText(recordData.getMaxdb()+"");
        holder.averagedb.setText(recordData.getAveragedb()+"");
        holder.startbutton.setOnClickListener(new View.OnClickListener() {
           final String noisepath = recordData.getPath();
            @Override
            public void onClick(View view) {
                if (mStartPlaying) {
                    Log.d(TAG, "onClick: start运行开始" +mposition+mStartPlaying);
                    startPlaying(noisepath, holder.startbutton);
                     mposition = position;
                    Log.d(TAG, "onClick: start运行结束" +mposition+mStartPlaying);
                } else {
                    if(mposition == position)
                    {
                        stopPlaying(holder.startbutton);
                        Log.d(TAG, "onClick: 正常stop"+mposition+mStartPlaying);
                    }
                    else
                    {
                        Log.d(TAG, "onClick: 点击其他的stop开始"+mposition+mStartPlaying);
                        player.release();//不管如何都要把上一个player给终结了
                        notifyItemChanged(mposition);
                        mposition = position;
                        startPlaying(noisepath, holder.startbutton);
                        Log.d(TAG, "onClick: 点击其他的stop结束"+mposition+mStartPlaying);
                    }
                }
                player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    @Override
                    public void onCompletion(MediaPlayer mp) {
                        player.release();
                        mStartPlaying = !mStartPlaying;
                        holder.startbutton.setBackground(mContext.getResources().getDrawable(R.drawable.ic_start));
                        Log.d(TAG, "onCompletion: "+mStartPlaying);
                    }
                });
            }
        });
    }
    @Override
    public int getItemCount() {
        return mRecordData.size();
    }
    private void startPlaying(String fileName,ImageButton button) {
        mStartPlaying = false;
        button.setBackground(mContext.getResources().getDrawable(R.drawable.ic_pause));
        Log.d(TAG, "startPlaying: "+mStartPlaying);
        player = new MediaPlayer();
        try {
            player.setDataSource(fileName);
            player.prepareAsync();//异步装载,不会让页面卡顿,但是用了异步装载就用用下面的回调函数
            player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    player.start();
                }
            });        //不然可能会没有装载完成就start了
        } catch (IOException e) {
            Log.d(TAG, "prepare() failed");
        }
    }
    private void stopPlaying(ImageButton button) {
        if(player != null)
        {
        player.release();
        mStartPlaying = true;
        button.setBackground(mContext.getResources().getDrawable(R.drawable.ic_start));
        Log.d(TAG, "stopPlaying: "+mStartPlaying);
        }
        else
            Log.d(TAG, "stopPlaying: "+"为空");
    }
}
你点击按钮后 刷新一下列表就可以了 notifyDataSetChanged();