Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

108
Visualizações
Los botones de opción dentro de RecyclerView siguen estando desmarcados aleatoriamente incluso cuando configuro explícitamente el estado marcado en un botón de opción

Para hacer que ViewHolder trate cada botón de opción por separado y no reutilice el estado del botón de opción anterior, almacené el estado de si un elemento de botón de opción está marcado o no en una lista de valores booleanos y configuré el estado de los botones de opción de acuerdo con esa lista. pero cuando me desplazo hacia abajo y hacia arriba, los botones de opción alternados se deshabilitan aleatoriamente a pesar de que isCheckedList contiene la información booleana correcta para cada botón de opción (imprimo la lista con logd() para verificar si realmente almacena los estados)

¿Alguna idea de lo que me estoy perdiendo?

 class QuestionAdapter(context: Context) : RecyclerView.Adapter<QuestionAdapter.QuestionViewHolder>() { private val listOfQuestion: List<String> private val listSize = 20 private val isCheckedList: MutableList<Boolean> = MutableList(listSize) { false } //Initialize a list of 20 questions. init { val allQuestions = context.resources.getStringArray(R.array.questions).toList() listOfQuestion = allQuestions .shuffled() .take(listSize) } class QuestionViewHolder(val view: View) : RecyclerView.ViewHolder(view) { val questionText = view.findViewById<TextView>(R.id.question) val radioButton = view.findViewById<RadioButton>(R.id.yes) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): QuestionViewHolder { val layout = LayoutInflater .from(parent.context) .inflate(R.layout.item_view, parent, false) return QuestionViewHolder(layout) } override fun onBindViewHolder(holder: QuestionViewHolder, position: Int) { val item = listOfQuestion[position] holder.questionText.text = item holder.radioButton.isChecked = isCheckedList[position] holder.radioButton.setOnCheckedChangeListener { _, isChecked -> isCheckedList[holder.adapterPosition] = isChecked Log.d("Adapter", "list: $isCheckedList ") } } override fun getItemCount(): Int { return listOfQuestion.size } }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Resolví el problema agregando esta línea de código holder.radioGroup.clearCheck() antes de configurar el estado de los botones de opción. Para más detalles, este es un blog que habla sobre el mismo problema y cómo lo resolvió.

over 4 years ago · Santiago Trujillo Relatório

0

Debe borrar la selección en el botón de radio antes de establecer su valor correcto.

 holder.radioGroup.clearCheck()

De esta manera, el grupo de RadioGroup borra su selección, listo para recibir una entrada que activará el botón de radio correcto RadioButton lo marcado.

Pero debe tener en cuenta que esto podría llamar a sus oyentes onCheckedChanged y podría generar resultados inesperados. Pero hay una solución para el problema resultante.

 // Nullify listener holder.radioGroup.setOnCheckedChangeListener(null); // Clear selection holder.radioGroup.clearCheck(); // Reset listener after selection has been cleared holder.radioGroup.setOnCheckedChangeListener(checkedChangeListener);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda