Android onCheckedChangeListener comportamiento bizzare

Así que estoy intentando codificar alguna lógica de CheckBox para una página en la que un usuario puede hacer +1 o -1 una input específica. La primera vez que mi RecyclerViewAdapter está vinculado, repito la list de votos y compruebo si la identificación del usuario está presente, y si el valor del voto es +1 o -1 aquí

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 } } 

¡Lo cual funciona bien! Si anteriormente voté +1 y volví a cargar, boom, la casilla está marcada. El problema, sin embargo, viene cuando trato de interactuar nuevamente con los cuadros. Si presiono el casillero +1, el cheque permanece y no hace nada. Esto también ocurre para el cuadro -1. También configuré mis oyentes para CheckBoxes en la function bindtask como tal

 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) } } }) } 

También vale la pena mencionar que tengo un receptor de socket en mi class de fragment que usa el adaptador para escuchar un evento +1 y -1, en cuyo caso actualiza el puntaje del elemento y notifica al adaptador que el set de datos ha cambiado. , como aquí

 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() } }) } } 

¿Puede alguno de ustedes ver por qué mis CheckBoxes funcionan bien cuando no se selecciona nada previamente, pero en una página de recarga se requieren varios clics solo para desmarcar los cuadros. Tiene que ver con notificar que el set de datos ha cambiado en mi oyente. ¿Estoy vinculando a los oyentes varias veces por lo que está jugando con mi lógica? ¿Mi lógica de checkbox simplemente es incorrecta? Cualquier ayuda aquí sería muy apreciada.