Это из-за того, как работает RecyclerView. Он перезаписывает ваш вид после того, как он исчезает с экрана. Вы должны использовать if / else для поддержания правильного состояния представления. Замените действие onClick приведенным ниже кодом.
holder.charityLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(holder.charityLayout.isSelected()) {
holder.charityLayout.setSelected(false);
System.out.println("Set to false");
} else {
holder.charityLayout.setSelected(true);
System.out.println("Set to true");
}
if(holder.charityLayout.isSelected()) {
holder.whiteBox.setBackgroundResource(R.drawable.bluebox);
DonateSelection.enableNextButton();
System.out.println("Blue Box");
}else{
holder.whiteBox.setBackgroundResource(R.drawable.box);
System.out.println("White Box");
}
}
});
Отредактировано Вот необработанный код. Но я думаю, что это должно работать. Вы должны добавить массив состояния проверки, из которого состоит переработчик. По умолчанию все они будут ложными. Затем проверьте это на BindViewHolder (). При нажатии установите логическое значение true и вызовите notifyDatasetChanged.
public class CharityListAdapter extends RecyclerView.Adapter<CharityListAdapter.CharityListViewHolder> {
String charityData[], descriptionData[];
int images[]; boolean checkState[];
Context context;
public CharityListAdapter(Context ct, String charity[], String description[], int image[],boolean checkState[]) {
context = ct;
charityData = charity;
descriptionData= description;
images = image;
checkState=checkState;
}
@NonNull
@Override
public CharityListViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.data_row, parent, false);
return new CharityListViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final CharityListViewHolder holder,final int position) {
holder.titleText.setText(charityData[position]);
holder.descText.setText(descriptionData[position]);
holder.charityImage.setImageResource(images[position]);
if(checkState[position]){
holder.whiteBox.setBackgroundResource(R.drawable.bluebox);
DonateSelection.enableNextButton();
}else{
holder.whiteBox.setBackgroundResource(R.drawable.box);
}
holder.charityLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(checkState[position]){
checkState[position]=false;
}else{
checkState[position]=true;
}
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return images.length;
}
public class CharityListViewHolder extends RecyclerView.ViewHolder {
TextView titleText, descText;
ImageView charityImage;
RelativeLayout whiteBox;
RelativeLayout charityLayout;
public CharityListViewHolder(@NonNull View itemView) {
super(itemView);
titleText = itemView.findViewById(R.id.titleText);
descText = itemView.findViewById(R.id.descText);
charityImage = itemView.findViewById(R.id.charityImage);
whiteBox = itemView.findViewById(R.id.whiteBox);
charityLayout = itemView.findViewById(R.id.charityLayout);
}
}
}