Android 在回收视图中更改卡的颜色
我正在尝试在安卓系统中制作一个应用程序,当点击时,我需要将cardview的颜色更改为灰色。我已经通过使用下面的代码做到了这一点,但我不知道如何使所有其他cardview的颜色恢复为白色 例如,当单击索引3处的cardview时,它应变为灰色;当单击索引5处的card view时,索引3处的cardview应将其颜色变回白色,只有索引5处的cardview应变为灰色Android 在回收视图中更改卡的颜色,android,android-recyclerview,Android,Android Recyclerview,我正在尝试在安卓系统中制作一个应用程序,当点击时,我需要将cardview的颜色更改为灰色。我已经通过使用下面的代码做到了这一点,但我不知道如何使所有其他cardview的颜色恢复为白色 例如,当单击索引3处的cardview时,它应变为灰色;当单击索引5处的card view时,索引3处的cardview应将其颜色变回白色,只有索引5处的cardview应变为灰色 @NonNull @Override public Myviewholder onCreateViewHo
@NonNull
@Override
public Myviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View v = layoutInflater.inflate(R.layout.add_recycle_layout , parent , false);
return new Myviewholder(v , onCatClick , list.size());
}
@Override
public void onBindViewHolder(@NonNull Myviewholder holder, int position) {
if(textView == null)
return;
textView.setText(list.get(position).getName());
img.setImageResource(list.get(position).getIcon());
}
@Override
public int getItemCount() {
return list.size();
}
public static class Myviewholder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView img;
TextView textView;
onCatClick onCatClick;
CardView cardView;
int size;
public Myviewholder(@NonNull View itemView , onCatClick onCatClick , int size) {
super(itemView);
img = itemView.findViewById(R.id.recycle_layout_image);
textView = itemView.findViewById(R.id.recycle_layout_text);
this.onCatClick = onCatClick;
itemView.setOnClickListener(this);
cardView = itemView.findViewById(R.id.recycle_layout_card);
this.size = size;
}
@Override
public void onClick(View v) {
onCatClick.onCatClicked(getAdapterPosition());
System.out.println("clicked" + getAdapterPosition());
cardView.setCardBackgroundColor(Color.parseColor("#e0e0e0"));
}
}
public interface onCatClick{
void onCatClicked(int position);
}
您需要在
Myviewholder
用这个
@Override
public void onBindViewHolder(@NonNull Myviewholder holder, int position) {
holder.textView.setText(list.get(position).getName());
holder.img.setImageResource(list.get(position).getIcon());
}
而不是这个
@Override
public void onBindViewHolder(@NonNull Myviewholder holder, int position) {
if(textView == null)
return;
textView.setText(list.get(position).getName());
img.setImageResource(list.get(position).getIcon());
}
尝试此方法更改选定项目的颜色
像这样做一个pojo类
public class MoodSelection
{
boolean isSelected;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.card.MaterialCardView;
import com.moodmedic.R;
import com.moodmedic.activity.ui.mood_fragment.MoodSelection;
import java.util.ArrayList;
import de.hdodenhof.circleimageview.CircleImageView;
public class SelectMoodAdapter extends RecyclerView.Adapter<SelectMoodAdapter.ViewHolder> {
private Context mContext;
private ArrayList<MoodSelection> arrayList = new ArrayList<>();
public SelectMoodAdapter(Context mContext, ArrayList<MoodSelection> arrayList) {
this.mContext = mContext;
this.arrayList = arrayList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.row_select_mood_list_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (arrayList.get(position).isSelected()) {
holder.rootView.setCardBackgroundColor(ContextCompat.getColor(mContext, R.color.colorAccent2));
} else {
holder.rootView.setCardBackgroundColor(ContextCompat.getColor(mContext, R.color.colorWhite));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < arrayList.size(); i++) {
arrayList.get(i).setSelected(false);
}
arrayList.get(position).setSelected(true);
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return arrayList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
MaterialCardView rootView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
rootView = itemView.findViewById(R.id.rootView);
}
}
}
现在像这样在适配器类中使用它
public class MoodSelection
{
boolean isSelected;
public boolean isSelected() {
return isSelected;
}
public void setSelected(boolean selected) {
isSelected = selected;
}
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.card.MaterialCardView;
import com.moodmedic.R;
import com.moodmedic.activity.ui.mood_fragment.MoodSelection;
import java.util.ArrayList;
import de.hdodenhof.circleimageview.CircleImageView;
public class SelectMoodAdapter extends RecyclerView.Adapter<SelectMoodAdapter.ViewHolder> {
private Context mContext;
private ArrayList<MoodSelection> arrayList = new ArrayList<>();
public SelectMoodAdapter(Context mContext, ArrayList<MoodSelection> arrayList) {
this.mContext = mContext;
this.arrayList = arrayList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.row_select_mood_list_layout, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (arrayList.get(position).isSelected()) {
holder.rootView.setCardBackgroundColor(ContextCompat.getColor(mContext, R.color.colorAccent2));
} else {
holder.rootView.setCardBackgroundColor(ContextCompat.getColor(mContext, R.color.colorWhite));
}
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < arrayList.size(); i++) {
arrayList.get(i).setSelected(false);
}
arrayList.get(position).setSelected(true);
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return arrayList.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
MaterialCardView rootView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
rootView = itemView.findViewById(R.id.rootView);
}
}
}
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.core.content.ContextCompat;
导入androidx.recyclerview.widget.recyclerview;
导入com.google.android.material.card.MaterialCardView;
导入com.moodmedic.R;
导入com.moodmedic.activity.ui.mood_fragment.MoodSelection;
导入java.util.ArrayList;
导入de.hdodenhof.circleimageview.circleimageview;
公共类SelectMoodAdapter扩展了RecyclerView.Adapter{
私有上下文;
私有ArrayList ArrayList=新ArrayList();
public SelectMoodAdapter(上下文mContext,ArrayList ArrayList){
this.mContext=mContext;
this.arrayList=arrayList;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
视图=布局更平坦。从(mContext)。充气(R.layout.row\u select\u mood\u list\u布局,父级,false);
返回新的ViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
if(arrayList.get(position.isSelected()){
setCardBackgroundColor(ContextCompat.getColor(mContext,R.color.colorAccent2));
}否则{
holder.rootView.setCardBackgroundColor(ContextCompat.getColor(mContext,R.color.colorWhite));
}
holder.itemView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
对于(int i=0;i
@MaskedCarrot check更新答案我添加了另一个示例代码