En qué parte del código debería usar las siguientes líneas para trabajar con mis widgets:

binding = WorkoutCardBinding.inflate(layoutInflater)
setContentView(binding.root)

Sé que debería usarse en la función onCreate de una actividad, pero parece que no puedo hacer que funcione con la siguiente clase de adaptador

    class WorkoutAdaptor (
    var workouts: List<Workout>
    ) : RecyclerView.Adapter<WorkoutAdaptor.WorkoutViewHolder>() {

    private lateinit var binding: WorkoutCardBinding

    inner class WorkoutViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WorkoutViewHolder {

        binding = WorkoutCardBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val view = LayoutInflater.from(parent.context).inflate(R.layout.workout_card, parent, false)
        return WorkoutViewHolder(view)
    }

    override fun onBindViewHolder(holder: WorkoutViewHolder, position: Int) {
            holder.itemView.apply {
            binding.tvWorkoutCard.text = workouts[position].
        }

    }

    override fun getItemCount(): Int {
        return workouts.size
    }
0
Eleris 2 oct. 2021 a las 09:57

2 respuestas

La mejor respuesta
val binding = WorkoutCardBinding.inflate(
           LayoutInflater.from(parent.context), parent, false)

return WorkoutViewHolder(binding)

// Cambia tu onCreateViewHolder completamente a este código

0
Kumar 2 oct. 2021 a las 07:39

No es necesario que cree una variable binding en la clase adapter. Para usar la vinculación de vista en recyclerView adapter, hay algunas cosas que debe cambiar.

En primer lugar, cambie su constructor de clase viewHolder para aceptar viewBinding en lugar de view

inner class WorkoutViewHolder(private val workoutCardBinding: WorkoutCardBinding) :
    RecyclerView.ViewHolder(workoutCardBinding.root) {
    fun bind(workout: Workout) {
        workoutCardBinding.apply {
            // create your view here
        }
}

Cambie onCreateViewHolder, para devolver un objeto viewHolder mediante enlace.

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WorkoutViewHolder {
    val workoutCardBinding=
        WorkoutCardBinding.inflate(LayoutInflater.from(parent.context), parent, false)

    return WorkoutCardBinding(workoutCardBinding)
}

Su clase de adaptador completa se verá así:

class WorkoutAdaptor (
    var workouts: List<Workout>
) : RecyclerView.Adapter<WorkoutAdaptor.WorkoutViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): WorkoutViewHolder {
        val workoutCardBinding =
            WorkoutCardBinding.inflate(LayoutInflater.from(parent.context), parent, false)

        return WorkoutCardBinding(workoutCardBinding)
    }

    override fun onBindViewHolder(holder: WorkoutViewHolder, position: Int) {
        holder.bind(workouts[position])
    }

    override fun getItemCount(): Int {
        return workouts.size
    }

    inner class WorkoutViewHolder(private val workoutCardBinding: WorkoutCardBinding) :
        RecyclerView.ViewHolder(workoutCardBinding.root) {
        fun bind(workout: Workout) {
            workoutCardBinding.apply {
                // create your view here
            }
        }
    }
}
0
Praveen 2 oct. 2021 a las 07:56