У меня возникла проблема с использованием флажка в представлении ресайклера. Проблема в том, что когда я проверяю 2-й элемент, то также выбирается элемент снизу списка, и подобное происходит, когда я выбираю любой другой элемент. Я искал stackoverflow и нашел похожие вопросы с ответами, и я пробовал эти решения, но они не работали.
Класс адаптера:
public class addServicesCheckOutAdapter extends RecyclerView.Adapter<addServicesCheckOutAdapter.ViewHolder> implements Filterable {
private List<ServiceList> listitemS;
private List<ServiceList> listitemsFilter;
private Context context;
private Map<String,String> hashMap;
private ArrayList<String> pricesList;
private List<String> list;
private int prevSelection = -1;
private int selectedPosition;
private boolean var = false;
Set<Integer> mCheckedItemPositions = new HashSet<>();
public addServicesCheckOutAdapter(List<ServiceList> listitems, Context context) {
this.listitemS = listitems;
this.context = context;
this.listitemsFilter = listitems;
}
public void filteredList(List<ServiceList> filetList) {
listitemS = filetList;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_add_services,parent,false);
pricesList = new ArrayList<>();
hashMap = new ConcurrentHashMap<>();
list = new ArrayList<>();
global.addServicesPrices = pricesList;
global.addServicesNameAndID = hashMap;
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
final ServiceList listitem = listitemsFilter.get(position);
holder.tvServiceName.setText(listitem.getService_name());
}
@Override
public int getItemCount() {
return listitemsFilter.size();
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String Key = constraint.toString();
if (Key.isEmpty()){
listitemsFilter = listitemS;
}
else {
List<Listitem> IstFilter = new ArrayList<>();
}
FilterResults filterResults = new FilterResults();
filterResults.values= listitemsFilter;
return filterResults;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
notifyDataSetChanged();
}
};
}
public void filterList(ArrayList<ServiceList> filterdNames) {
this.listitemS = filterdNames;
notifyDataSetChanged();
}
public static class ViewHolder extends RecyclerView.ViewHolder{
TextView tvServiceName;
CheckBox checkBox;
public ViewHolder(@NonNull View itemView) {
super(itemView);
tvServiceName = itemView.findViewById(R.id.tvServiceName);
checkBox = itemView.findViewById(R.id.checkBox);
}
}//View Holder
}