如何将itemView中的switchButton绑定到RecyclerView中的相应对象?

问题描述

我是初学者,我想弄清楚。

我有对象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