I am beginner, I'm trying to figure out.
I have objects Word (String swedish, String russian, int status). Status defines in which gamelevel the word should appear (for now it can be 200 or 300).
How can I do so that switchButton "switchStatus" in every item of RecyclerView would change word.status between 200 (for true) and 300 (for false)? And update the word in database, of course.
public class WordAdapter extends RecyclerView.Adapter<WordAdapter.WordHolder> {
private List<Word> words = new ArrayList<>();
private OnItemClickListener listener;
@NonNull
@Override
public WordHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.word_item, parent, false);
return new WordHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull WordHolder holder, int position) {
Word currentWord = words.get(position);
holder.textViewSwedish.setText(currentWord.getSwedish());
holder.textViewRussian.setText(currentWord.getRussian());
holder.switchStatus.set//??????????;
}
class WordHolder extends RecyclerView.ViewHolder {
private TextView textViewSwedish;
private TextView textViewRussian;
private Switch switchStatus;
public WordHolder(@NonNull View itemView) {
super(itemView);
textViewSwedish = itemView.findViewById(R.id.text_view_swedish);
textViewRussian = itemView.findViewById(R.id.text_view_russian);
switchStatus = itemView.findViewById(R.id.btn_switch);
}
}
}
This is WordList.activity:
public class WordList extends AppCompatActivity {
private WordViewModel wordViewModel;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setHasFixedSize(true);
final WordAdapter adapter = new WordAdapter();
recyclerView.setAdapter(adapter);
wordViewModel = new ViewModelProvider(this,
ViewModelProvider.AndroidViewModelFactory.getInstance(this.getApplication())).get(WordViewModel.class);
wordViewModel.getAllWords().observe(this, new Observer<List<Word>>() {
@Override
public void onChanged(List<Word> words) {
adapter.setWords(words);
}
});
}
This is the Word object:
@Entity(tableName = "word_table")
public class Word {
@PrimaryKey(autoGenerate = true)
private int id;
private String russian;
private String swedish;
private int status;
public Word(String russian, String swedish, String sound, int status) {
this.russian = russian;
this.swedish = swedish;
this.status = status;
}
WordViewModel.class (if needed):
public class WordViewModel extends AndroidViewModel {
private WordRepository repository;
private LiveData<List<Word>> allWords;
private LiveData<List<Word>> practiceWords;
private LiveData<List<Word>> archivedWords;
public WordViewModel(@NonNull Application application) {
super(application);
repository = new WordRepository(application);
allWords = repository.getAllWords();
practiceWords = repository.getPracticeWords();
archivedWords = repository.getArchivedWords();
}
public void insert(Word word) {
repository.insert(word);
}
public void update(Word word) {
repository.update(word);
}
public void delete(Word word) {
repository.delete(word);
}
public void deleteAllWords() {
repository.deleteAllWords();
}
public LiveData<List<Word>> getAllWords() {
return allWords;
}
public LiveData<List<Word>> getPracticeWords() {
return practiceWords;
}
public LiveData<List<Word>> getArchivedWords() {
return archivedWords;
}