Irf*_*lah 5 android onclicklistener android-recyclerview
我想更改ImageViewin的图像RecyclerView。
例如 :
我在 a 中有 30 个项目,RecyclerView当我单击位置 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里播放按钮是我想要更改的图像视图,而 mediaPlayerControl 是接口
您可以使用全局字段跟踪所选位置,然后检查当前视图是否被选中onBindViewHolder。此外,我强烈建议你分配onClickListener你的里面ViewHolder。
声明一个全局变量:
private int selectedPosition = -1;
Run Code Online (Sandbox Code Playgroud)然后在您的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();
}
Run Code Online (Sandbox Code Playgroud)最后检查您选择的位置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);
}
}
Run Code Online (Sandbox Code Playgroud)编辑
正如@shalafi 所建议的,您不应该在RecyclerView适配器内保留对特定视图的引用,因为这些视图正在被回收(重用)。
| 归档时间: |
|
| 查看次数: |
7104 次 |
| 最近记录: |