繁体   English   中英

如何在 Recyclerview 中为未选中的项目设置背景颜色和文本颜色?

[英]How to set Background color and text color for unselected item in Recyclerview?

我正在使用 RecyclerView。 在我的 RecyclerView 项目中,我使用的是一个按钮视图。 下面是我的 RecyclerView 项目布局,

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <Button
        android:id="@+id/cost_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
         />


</androidx.constraintlayout.widget.ConstraintLayout>

下面是我的适配器 class,

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<Plan> plans;
    private MyInterface myInterface;
    private int index=-1;
    public RecyclerViewAdapter(List<Plan> planList, MyInterface myInterfaceListener) {
        this.plans =planList;
        this.myInterface=myInterfaceListener;
    }

   interface MyInterface{
        public void getId(String id);
   }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.recycler_view_item, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        MyViewHolder myViewHolder=(MyViewHolder) holder;
        myViewHolder.costButton.setText(plans.get(position).getAmount());
        if(index==-1) {
            if(plans.get(0).getAmount().equalsIgnoreCase(plans.get(position).getAmount())) {
                myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
                myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
            }
            else{
                myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
                myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
            }
        }
        myViewHolder.costButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                index=position;
                if(index==position){
                    myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
                    myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
                }
                else{
                    myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
                    myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
                }
            }
        });


    }

    @Override
    public int getItemCount() {
        return plans.size();
    }

    private class MyViewHolder extends RecyclerView.ViewHolder{
        private Button costButton;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            costButton=itemView.findViewById(R.id.cost_button);

        }
    }

}

我可以为所选项目设置背景颜色和文本颜色。 我的问题是,考虑有 4 个按钮。 如果单击按钮 1,则可以更改颜色。 之后,我单击按钮 2。此时,单击项目的颜色发生变化,并且按钮 1 的颜色也已更改,保持不变。 这是我的问题。 任何人都可以帮我解决这个问题。

将您的代码段更改为:

public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        MyViewHolder myViewHolder=(MyViewHolder) holder;
        myViewHolder.costButton.setText(plans.get(position).getAmount());
        if(index==-1) {
            if(plans.get(0).getAmount().equalsIgnoreCase(plans.get(position).getAmount())) {
                myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
                myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
            }
            else{
                myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
                myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
            }
        }else{
            if(index==position){
                myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
                myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
            }
            else{
                myViewHolder.costButton.setBackgroundColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.color_white));
                myViewHolder.costButton.setTextColor(myViewHolder.itemView.getContext().getResources().getColor(R.color.blue));
            }
        }
        myViewHolder.costButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                index=position;
               notifyDataSetChanged();
            }
        });


    }

您可以使用复选框而不是按钮并根据需要对其进行自定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM