Android RecyclerView ViewBinding 崩溃问题

397 阅读1分钟

1. 使用方式

class FourCameraAdapter :
    RecyclerView.Adapter<FourCameraAdapter.FourCameraViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FourCameraViewHolder {
        val binding = FourCameraRvItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return FourCameraViewHolder(binding)
    }

    override fun getItemCount() = 4

    override fun onBindViewHolder(holder: FourCameraViewHolder, position: Int) {
        holder.bindView(position)
    }

    class FourCameraViewHolder(val binding: FourCameraRvItemBinding) :
        RecyclerView.ViewHolder(binding.root) {
        fun bindView(pos: Int) {}
    }
}

报错如下:

java.lang.IllegalStateException: ViewHolder views must not be attached when created. Ensure that you are not passing 'true' to the attachToRoot parameter of LayoutInflater.inflate(..., boolean attachToRoot)

2. 解决方法

从外部传入 Context

class FourCameraAdapter(val context: Context) :
    RecyclerView.Adapter<FourCameraAdapter.FourCameraViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FourCameraViewHolder {
        val binding = FourCameraRvItemBinding.inflate(LayoutInflater.from(context), parent, false)
        return FourCameraViewHolder(binding)
    }

    override fun getItemCount() = 4

    override fun onBindViewHolder(holder: FourCameraViewHolder, position: Int) {
        holder.bindView(position)
    }

    class FourCameraViewHolder(val binding: FourCameraRvItemBinding) :
        RecyclerView.ViewHolder(binding.root) {
        fun bindView(pos: Int) {}
    }
}