Моя активность содержит RecyclerView.Adapter
, и каждая ячейка этого адаптера содержит переключатель.В моей деятельности у меня есть главный переключатель, который будет контролировать поведение этих переключателей в моем адаптере.
Мой главный переключатель:
switchAllBureau.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean b) {
//code to control adapter switches
}
});
Код адаптера:
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
final String nameBureau = bureaus.get(position).getName();
holder.txtNameBureau.setText(nameBureau);
holder.switchBureau.setChecked(interactor.isBureauSubscribed(bureaus.get(position).getCode()));
holder.switchBureau.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean b) {
if(b){
//do something
} else {
//do something
}
}
});
}
Код ViewHolder:
class MyViewHolder extends RecyclerView.ViewHolder {
private TextView txtNameBureau;
private ToggleButton switchBureau;
MyViewHolder(View view) {
super(view);
txtNameBureau = view.findViewById(R.id.txt_name_bureau);
switchBureau = view.findViewById(R.id.switch_bureau);
}
}
Как изменить переключатели адаптера на основе главного переключателя?
ОБНОВЛЕНИЕ: добавление частного интерфейса и реализация при создании держателя вида работает.Но обновляется только самое последнее:
private interface ChangeSwitch{
void change(boolean select);
}
MyViewHolder(View view) {
super(view);
txtNameBureau = view.findViewById(R.id.txt_name_bureau);
switchBureau = view.findViewById(R.id.switch_bureau);
changeSwitch = new ChangeSwitch() {
@Override
public void change(boolean select) {
switchBureau.setChecked(select);
}
};
}
И я называю это в моем главном переключателе из действия:
public void selectAllBureaus(boolean selectAll){
changeSwitch.change(selectAll);
}