簡體   English   中英

單擊RecyclerView Cardview項的背景顏色更改

[英]RecyclerView Cardview item background color change When Click on Its Item

當我單擊RecylerView項目時,我試圖更改RecyclerView CardView背景的顏色(綠色),當我單擊RecyclerView的下一個項目時,則前一個項目必須更改/變為其原始顏色(粉紅色),並且所選項目的顏色將被改變,那就是綠色。 有人可以給我適當的解決方案。

請看圖片

我的課-:

public class RecylerAdapter extends  RecyclerView.Adapter<RecylerAdapter.ViewHolder>
{   private boolean isSelected;
    private final static int FADE_DURATION = 500;// milliseconds
    private int lastPosition = -1;
    Context cont;
  private  String[] strname;
    private int[] icon;
    public RecylerAdapter(Context con, String[] androidNames, int[] androidIcon)
    {   cont=con;
        strname=androidNames;
        icon=androidIcon;
    }
    class ViewHolder extends RecyclerView.ViewHolder
    {   private ImageView imgView;
        private TextView txtView;
        private CardView cardView;
        private SparseBooleanArray selectedItems = new SparseBooleanArray();

        public ViewHolder(final View itemView)
        {
            super(itemView);

            imgView = (ImageView) itemView.findViewById(R.id.imageView);
            txtView = (TextView) itemView.findViewById(R.id.txt);
            cardView = (CardView) itemView.findViewById(R.id.cv12);


            itemView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    cardView.isSelected = !cardView.isSelected;
                    notifyDataSetChanged();
                }
            });
        }
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout,parent,false);
        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onBindViewHolder(ViewHolder holder, int i)
    {
        if(ViewHolder.isSelected)
        {
            holder.cardView.setBackground(Color.Green);
        }
        else{
            holder.cardView.setBackground(Color.Pink);
        }
        holder.txtView.setText(strname[i]);
        holder.imgView.setImageResource(icon[i]);
        setAnimation(holder.cardView, i);
    }
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setAnimation(View viewToAnimate, int position)
    {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition)
        {
            //animation 1
            AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
            anim.setDuration(FADE_DURATION);
            viewToAnimate.startAnimation(anim);

            //animation 2
            Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
        else
        {
            Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }
    @Override
    public int getItemCount()
    {
        return strname.length;
    }
    public void setSelected(boolean selection){
        this.isSelected = selection;
    }
    public boolean isSelected(){
        return isSelected;
    }
}

關於使用模型類進行項目選擇管理的全部內容:

MyModel.class:這是用於顯示回收者視圖數據列表的類。 添加一個布爾變量以進行選擇和取消選擇。

private boolean isSelected;

public void setSelected(boolean selection){
this.isSelected = selection;
}

public boolean isSelected(){
return isSelected;
}

現在,在項目中單擊適配器中的回收站視圖:

myModel = list.get(position);
myModel.isSelected = !myModel.isSelected;
notifyDataSetChanged();

在適配器的onBindViewHolder方法中

    myModel = list.get(position);
    if(myModel.isSelected){
       itemView.setBackground(Color.Green);
    }else{
       itemView.setBackground(Color.Pink);
    }

使用此邏輯進行檢查,如果發現任何困難,請告知我。

由於您未使用模型類列表,因此更新的代碼使您無法使用模型變量選擇進行管理,請檢查以下內容:

    public class RecylerAdapter extends RecyclerView.Adapter<RecylerAdapter.ViewHolder> {
    private boolean isSelected;
    private final static int FADE_DURATION = 500;// milliseconds
    private int lastPosition = -1;
    Context cont;
    private String[] strname;
    private int[] icon;
    private int selectedPosition = -1;

    public RecylerAdapter(Context con, String[] androidNames, int[] androidIcon) {
        cont = con;
        strname = androidNames;
        icon = androidIcon;
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        private ImageView imgView;
        private TextView txtView;
        private CardView cardView;
        private SparseBooleanArray selectedItems = new SparseBooleanArray();

        public ViewHolder(final View itemView) {
            super(itemView);
            imgView = (ImageView) itemView.findViewById(R.id.imageView);
            txtView = (TextView) itemView.findViewById(R.id.txt);
            cardView = (CardView) itemView.findViewById(R.id.cv12);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    selectedPosition = getAdapterPosition();
                    notifyDataSetChanged();
                }
            });
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_layout, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);

        return viewHolder;
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void onBindViewHolder(ViewHolder holder, int i) {
        if (selectedPosition == i) {
            holder.cardView.setBackground(Color.Green);
        } else {
            holder.cardView.setBackground(Color.Pink);
        }
        holder.txtView.setText(strname[i]);
        holder.imgView.setImageResource(icon[i]);
        setAnimation(holder.cardView, i);
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    private void setAnimation(View viewToAnimate, int position) {
        // If the bound view wasn't previously displayed on screen, it's animated
        if (position > lastPosition) {
            //animation 1
            AlphaAnimation anim = new AlphaAnimation(0.0f, 1.0f);
            anim.setDuration(FADE_DURATION);
            viewToAnimate.startAnimation(anim);

            //animation 2
            Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        } else {
            Animation animation = AnimationUtils.loadAnimation(cont, android.R.anim.slide_in_left);
            viewToAnimate.startAnimation(animation);
            lastPosition = position;
        }
    }

    @Override
    public int getItemCount() {
        return strname.length;
    }
}

在您的適配器類中執行此操作。

公共類MyView擴展了RecyclerView.ViewHolder {

    public TextView textView;
    public ImageView imageView;
    public ImageView lineImageView;

    public MyView(View view) {
        super(view);

        textView = (TextView) view.findViewById(R.id.name);
        imageView = (ImageView) view.findViewById(R.id.food_category_img);
        lineImageView = (ImageView) view.findViewById(R.id.line);

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                for(int i=0; i<mDataset.size();i++)
                {
                    mDataset.get(i).setSelected(false);
                }
                mDataset.get(getAdapterPosition()).setSelected(true);
                notifyDataSetChanged();
            }
        });
    }
}

在綁定視圖持有者中執行此操作

   if(mDataset.get(position).isSelected()){
        itemView.Background(set color)
    }else{
       itemView.Background(set color)
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM