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

标签 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

我想要什么:我只想更改所选项目的背景,因此当我决定选择另一个项目时,应取消选择前一个项目。

谢谢您的回答

最佳答案

试试这个

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

关于java - 如何更改Recyclerview所选项目的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680778/

相关文章:

java - 为什么 count 的值没有改变

java - 从程序中获取时间复杂度和空间复杂度

java - 如何通过 Java 更改 strings.xml 中的值 (Android)

xml - 编辑文档 Python-docx 标题中的内容

java - 评估通过文件与编码创建 GUI

java - debug.keystore 不存在

java - JIT 编译器和内部循环

android - 使用 ibeacon 构建简单的室内定位

android - 优化/组合相关的Android布局

android - Android 中未显示谷歌地图