#java #android #android-recyclerview #android-room #android-viewholder
#java #Android #android-recyclerview #android-комната #android-viewholder
Вопрос:
Я новичок, я пытаюсь разобраться.
У меня есть объекты Word (String шведский, String русский, int status). Статус определяет, на каком игровом уровне должно появиться слово (на данный момент оно может быть 200 или 300).
Как я могу сделать так, чтобы кнопка switchButton «switchStatus» в каждом элементе RecyclerView изменяла word.status между 200 (для true) и 300 (для false)? И, конечно, обновите слово в базе данных.
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);
}
}
}
Это 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);
}
});
}
Это слово 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 (при необходимости):
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;
}
Ответ №1:
Чтобы установить значение для switch, вы должны установить true или false, поэтому в вашем случае, если значение равно 200, это true, а в противном случае false. Вы можете установить значение переключателя, как показано в приведенном ниже коде:
holder.switchStatus.setChecked(currentWord.getStatus()==200)
Комментарии:
1. Пожалуйста, добавьте объяснение, чтобы улучшить понимание и предоставить OP дополнительную информацию