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