gpt4 book ai didi

android - 在 RecyclerView 中更改 ImageView 中的图像

转载 作者:太空宇宙 更新时间:2023-11-03 13:45:46 26 4
gpt4 key购买 nike

我想在 RecyclerView 中更改 ImageView 的图像。

例如:

我在 RecyclerView 中有 30 个项目,当我单击位置 1 的项目时,项目将图像从播放更改为暂停,然后当我向下滚动到位置 15 并单击上一个选择的按钮(第 1 项)的播放按钮应将图像更改回播放,第 15 项图像应更改为暂停。我在 onbindViewHolder 中实现了 onClicklistener。但是,它正在更改错误项目中的图像。请帮助我

if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.stop();
LinearLayout view = (LinearLayout) recyclerView.getChildAt(pos);
ImageView button = (ImageView) view.findViewById(R.id.playbutton);
button.setImageResource(R.drawable.ic_play_arrow_black_24dp);
}

playbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isPlaying = sharedPreferences.getBoolean(ConstantValue.ISPLAYING, false);
RecordingDetail recordingDetail = list.get(getAdapterPosition());
if (!isPlaying) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(ConstantValue.ISPLAYING, true);
editor.putInt(ConstantValue.CURRENTINDEX, getAdapterPosition());
editor.commit();
playbutton.setImageResource(R.drawable.ic_pause_black_24dp);
mediaPlayerControl.Play(recordingDetail.path, getAdapterPosition(), progressBar);
}
}
}

这里的播放按钮是我想要更改的 ImageView ,mediaPlayerControl 是界面

最佳答案

您可以使用全局字段跟踪所选位置,然后检查当前 View 是否在 onBindViewHolder 中被选中。此外,我强烈建议您在 ViewHolder 中分配 onClickListener

  1. 声明一个全局变量:

    private int selectedPosition = -1;
  2. 然后在您的 onClick 中设置所选位置并调用 notifyDatasetChanged :

    @Override
    public void onClick(View view) {
    selectedPosition = getAdapterPosition();

    if (mediaPlayer != null) {
    mediaPlayer.reset();
    mediaPlayer.stop();
    }

    RecordingDetail recordingDetail = list.get(selectedPosition);

    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(ConstantValue.ISPLAYING, true);
    editor.putInt(ConstantValue.CURRENTINDEX, selectedPosition);
    editor.commit();

    mediaPlayerControl.Play(recordingDetail.path, selectedPosition, progressBar);

    notifyDatasetChanged();
    }
  3. 最后检查您在 onBindViewHodler 中选择的位置并设置适当的图像:

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
    LinearLayout view = holder.linearLayout;
    ImageView button = (ImageView) view.findViewById(R.id.playbutton);

    if (position == selectedPosition) {
    button.setImageResource(R.drawable.ic_pause_black_24dp);
    } else {
    button.setImageResource(R.drawable.ic_play_arrow_black_24dp);
    }
    }

编辑

作为@shalafi建议,您不应该在 RecyclerView 适配器中保留对特定 View 的引用,因为 View 正在被回收(重用)。

关于android - 在 RecyclerView 中更改 ImageView 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com