【问题标题】:How to change the background of Recyclerview selected item如何更改 Recyclerview 所选项目的背景
【发布时间】:2019-04-14 22:58:08
【问题描述】:

我很想改变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>

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

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

谢谢你的回答

【问题讨论】:

    标签: java android xml android-recyclerview


    【解决方案1】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      相关资源
      最近更新 更多