Crash при нажатии SwitchButton в itemView в recyclerView. Что неправильно в коде? Switch должен менять цифру в переменной объекта
При переключении SwitchButton в itemView в recyclerView вылетает прилоежение и такая ошибка:
Attempt to invoke interface method 'void space.rodionov.slovar.WordListAdapter$OnToggleChangeListener.onToggleChange(space.rodionov.slovar.Word, boolean)' on a null object reference
at space.rodionov.slovar.WordListAdapter.lambda$onBindViewHolder$0$WordListAdapter
Switch должен менять цифру в переменной объекта Word (см. код в MainActivity).
ViewHolder:
public class WordViewHolder extends RecyclerView.ViewHolder {
private final TextView tvSwedish;
private final TextView tvNativ;
private final Switch btnSwitch;
//...other methods of ViewHolder...
public void bind(String swedishWord, String nativWord, CompoundButton.OnCheckedChangeListener listener) {
tvSwedish.setText(swedishWord);
tvNativ.setText(nativWord);
btnSwitch.setOnCheckedChangeListener(listener);
}
}
Adapter:
public class WordListAdapter extends ListAdapter<Word, WordViewHolder> {
private OnToggleChangeListener myListener;
public interface OnToggleChangeListener {
void onToggleChange(Word word, boolean isChecked);
}
//...other methods of adapter...
@Override
public void onBindViewHolder(@NonNull WordViewHolder holder, int position) {
Word currentWord = getItem(position);
holder.bind(currentWord.getSwedish(), currentWord.getNativ(), (buttonView, isChecked) -> {
if (isChecked) {
myListener.onToggleChange(currentWord, true);
buttonView.setChecked(true);
} else {
myListener.onToggleChange(currentWord, false);
buttonView.setChecked(false);
}
});
}
}
MainActivity:
public class MainActivity extends AppCompatActivity implements
WordListAdapter.OnToggleChangeListener {
@Override
public void onToggleChange(Word word, boolean isChecked) {
if (isChecked) {
word.setLevel(200);
} else {
word.setLevel(300);
}
mWordViewModel.update(word);
}
}
Word.class:
@Entity(tableName = "word_table")
public class Word {
@PrimaryKey(autoGenerate = true)
@NonNull
private int id;
@NonNull
private String swedish;
@NonNull
private String nativ;
@NonNull
private int level;
//...getters setters constructor etc...
}