问题描述
我是初学者,我想弄清楚。
我有对象Word(字符串瑞典语,俄语字符串,int状态)。状态定义了单词应出现在哪个游戏级别(目前可以是200或300)。
如何才能使RecyclerView的每个项目中的switchButton“ switchStatus”都将word.status更改为200(对于true)和300(对于false)?并更新数据库中的单词。
public class WordAdapter extends RecyclerView.Adapter<WordAdapter.WordHolder> {
private List<Word> words = new ArrayList<>();
private OnFuckingItemClickListener 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);
}
});
}
这是Word对象:
@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;
}
解决方法
要为switch设置值,您必须设置true或false,因此在您的情况下,如果value为200,则为true,否则为false。您可以像下面的代码一样设置开关值:
Predicted COndition