如何更改Recyclerview所选项目的背景

时间:2019-04-14 22:58:08

标签: java android xml android-recyclerview

我想更改Recyclerview所选项目(只有一个)的背景:

enter image description here

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>

问题: 当我选择另一个项目时,上一个项目保持选中状态

enter image description here

我想要的内容:我只想更改所选一项的背景,因此当我决定选择另一项时,应取消选择上一项。

感谢您的回答

1 个答案:

答案 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
    }
}