我想更改Recyclerview
所选项目(只有一个)的背景:
java:
public class HorizontalViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView img;
private SparseBooleanArray selectedItem = new SparseBooleanArray();
public HorizontalViewHolder(View itemView) {
super(itemView);
img = (ImageView) itemView.findViewById(R.id.img);
itemView.setOnClickListener(this);
}
void onBindView(int position) {
final String s = spacecrafts.get(position);
Glide.with(c).asBitmap().load(s).apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
return false;
}
}).into(img);
}
@Override
public void onClick(View view) {
monRecyclerViewClickListener.onClick(view, spacecrafts.get(getAdapterPosition()));
if (selectedItem.get(getAdapterPosition(), false)) {
selectedItem.clear();
view.setSelected(false);
} else {
selectedItem.put(getAdapterPosition(), true);
view.setSelected(true);
}
// img.setBackgroundDrawable(c.getResources().getDrawable(R.drawable.imagebordertwo));
}
}
XML:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/imagebordertwo" android:state_pressed="false" android:state_selected="true" />
<item android:drawable="@android:color/black" android:state_selected="false" />
</selector>
问题: 当我选择另一个项目时,上一个项目保持选中状态
我想要的内容:我只想更改所选一项的背景,因此当我决定选择另一项时,应取消选择上一项。
感谢您的回答
答案 0 :(得分:2)
尝试一下
private int selectedIndex = -1;
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.btn1.setOnClickListener( v -> {
if (selectedIndex != position) {
selectedIndex = position;
notifyDataSetChanged();
}
}
);
// Change here the background of unselected item
if (selectedIndex == position) {
// Change here the background of selected item
}
}