Android onCheckedChangeListener поведение bizzare

Поэтому я пытаюсь закодировать некоторую логику CheckBox для страницы, в которой пользователь может добавить +1 или -1 конкретную запись. В первый раз, когда мой RecyclerViewAdapter связан, я перебираю список голосов и проверяю, присутствует ли идентификатор пользователя, и если значение для голосования составляет +1 или -1 здесь

fun bindTask(lunchVote: LunchVoteGroupDestination) { mItem = lunchVote mIdView.text = lunchVote.groupDestination?.nickname mScoreView.text = lunchVote.score.toString() destinationId = lunchVote.groupDestinationId votes = lunchVote.votes for(vote: Vote in votes) { if(prefs!!.currentId == vote.userId && vote.voteValue == 1) { plusOneBox.setOnCheckedChangeListener(null) plusOneBox.isChecked = true } if (vote.userId.equals(prefs!!.currentId) && vote.voteValue == -1) { minusOneBox.setOnCheckedChangeListener(null) minusOneBox.isChecked = true } } 

Что работает отлично! Если я ранее проголосовал +1 и перезагрузился, бум, коробка будет проверена. Однако проблема возникает, когда я снова пытаюсь взаимодействовать с ящиками. Если я попал в поле +1, проверка останется и ничего не сделает. Это также происходит для поля -1. Я также установил мои слушатели для CheckBoxes в функции bindtask, например

 fun bindTask(lunchVote: LunchVoteGroupDestination) { mItem = lunchVote mIdView.text = lunchVote.groupDestination?.nickname mScoreView.text = lunchVote.score.toString() destinationId = lunchVote.groupDestinationId votes = lunchVote.votes for(vote: Vote in votes) { if(prefs!!.currentId == vote.userId && vote.voteValue == 1) { plusOneBox.setOnCheckedChangeListener(null) plusOneBox.isChecked = true } if (vote.userId.equals(prefs!!.currentId) && vote.voteValue == -1) { minusOneBox.setOnCheckedChangeListener(null) minusOneBox.isChecked = true } } System.out.println("PlusOneBox " + plusOneBox.isChecked + mIdView.text) plusOneBox.setOnCheckedChangeListener(object : CompoundButton.OnCheckedChangeListener { override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) { System.out.println("PLUSONE CHECKED") if(isChecked) { val upvoteData = VoteObject(prefs!!.accessToken, prefs!!.currentGroup, prefs!!.currentLunchVote, destinationId) socket.upvote(upvoteData) } else { val downvoteData = VoteObject(prefs!!.accessToken, prefs!!.currentGroup, prefs!!.currentLunchVote, destinationId) socket.downvote(downvoteData) } } }) minusOneBox.setOnCheckedChangeListener(object : CompoundButton.OnCheckedChangeListener { override fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) { System.out.println("MINUSONE CHECKED") if(isChecked) { val downvoteData = VoteObject(prefs!!.accessToken, prefs!!.currentGroup, prefs!!.currentLunchVote, destinationId) socket.downvote(downvoteData) } else { minusOneBox.setOnCheckedChangeListener(null) val upvoteData = VoteObject(prefs!!.accessToken, prefs!!.currentGroup, prefs!!.currentLunchVote, destinationId) socket.upvote(upvoteData) minusOneBox.setOnCheckedChangeListener(this) } } }) } 

Также стоит отметить, что у меня есть прослушиватель сокетов в моем классе фрагмента, который использует адаптер, который прослушивает событие +1 и -1, и в этом случае он обновляет оценку элемента и уведомляет адаптер, что набор данных изменился , как здесь

 private val onUpvote = Emitter.Listener { args -> val data = args[0] as JSONObject var newScore: Int var updatedId: Int System.out.println(data) if(activity != null) { activity.runOnUiThread({ try { newScore = data.getInt("score") updatedId = data.getInt("id") for (i in LUNCHVOTE_DESTINATIONS.size - 1 downTo 0) { val destination = LUNCHVOTE_DESTINATIONS.get(i) if(updatedId == destination.id) { LUNCHVOTE_DESTINATIONS.get(i).score = newScore recyclerView!!.adapter.notifyItemChanged(i, LUNCHVOTE_DESTINATIONS.get(i)) break } } } catch (e: JSONException) { e.printStackTrace() } }) } } 

Может ли кто-нибудь из вас понять, почему мои CheckBoxes работают нормально, когда ничего не выбрано ранее, но при перезагрузке страницы требуется несколько кликов, чтобы снять флажки. Это связано с уведомлением об изменении набора данных в моем слушателе. Я связываю слушателей несколько раз, так что это возится с моей логикой? Является ли моя логическая схема неправильной? Любая помощь здесь была бы высоко оценена.