#java #checkbox #android-recyclerview #android-checkbox
Вопрос:
Я использую представление recycler для отображения данных из моей базы данных, но у меня проблема, когда я нажимаю, например, на второй элемент, он выбирается, но также одновременно выбираются 12 и 22 элемента, я понятия не имею, почему это работает таким образом, особенно я писал очень похожий адаптер раньше и у меня нет этой проблемы. Может быть, есть какие-то параметры для флажков, чтобы предотвратить эту ситуацию, но я их не нашел. Код для моего класса адаптера:
package com.example.ofiicial.WORKOUT; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.example.ofiicial.EXERCISES.Exercises; import com.example.ofiicial.R; import java.util.ArrayList; public class ExercisesInAddExerciseToWorkoutRecViewAdapter extends RecyclerView.Adapterlt;ExercisesInAddExerciseToWorkoutRecViewAdapter.ViewHoldergt; { public ExercisesInAddExerciseToWorkoutRecViewAdapter(){} private ArrayListlt;Exercisesgt; exercises = new ArrayListlt;gt;(); public static ArrayListlt;Integergt; exerciseIDtoAdd = new ArrayListlt;gt;(); @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.exercises_in_add_exercise_to_workout_list, parent, false); ExercisesInAddExerciseToWorkoutRecViewAdapter.ViewHolder vHolder = new ExercisesInAddExerciseToWorkoutRecViewAdapter.ViewHolder(view); return vHolder; } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { holder.exerciseName.setText(exercises.get(position).getExercise_name()); holder.exerciseType.setText(exercises.get(position).getExercise_type()); //Adding exercises to list when state of the checkbox changes holder.exerciseCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { exerciseIDtoAdd.add(exercises.get(position).getID()); } else { exerciseIDtoAdd.remove(exercises.get(position).getID()); } } }); } @Override public int getItemCount() { return exercises.size(); } public void setExercises(ArrayListlt;Exercisesgt; exercises) { this.exercises = exercises; notifyDataSetChanged(); } public class ViewHolder extends RecyclerView.ViewHolder { private TextView exerciseName, exerciseType; private ImageView exerciseImg; private CheckBox exerciseCheckbox; public ViewHolder(@NonNull View itemView) { super(itemView); exerciseName = itemView.findViewById(R.id.exercise_in_add_exercise_to_workout_name); exerciseType = itemView.findViewById(R.id.exercise_in_add_exercise_to_workout_type); exerciseImg = itemView.findViewById(R.id.exercise_in_add_exercise_to_workout_image); exerciseCheckbox = itemView.findViewById(R.id.exercise_add_to_workout_checkBox); } } }
Я надеюсь, что это вся необходимая информация, которая поможет решить мою проблему