如何为 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();
}
});
}
我正在使用 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();
}
});
}