我想更改ImageView
中RecyclerView
的图片。
例如:
我在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);
}
此处播放按钮是图像视图,我想要更改,而mediaPlayerControl是界面
答案 0 :(得分:3)
您可以使用全局字段跟踪所选位置,然后检查是否在onBindViewHolder
内选择了当前视图。另外,我强烈建议您在onClickListener
内分配ViewHolder
。
声明一个全局变量:
private int selectedPosition = -1;
然后在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();
}
最后检查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
适配器中保留对特定视图的引用,因为视图正在被回收(重用)。