2 回答
TA贡献1865条经验 获得超7个赞
发生此错误的另一个场景是在 RecyclerView 的 ViewHolder 中。
避免在 ViewHolder 的绑定方法中初始化绑定实例
class BindingAdapter(private val items: List<Any>): RecyclerView.Adapter<BindingHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BindingHolder {}
override fun onBindViewHolder(holder: BindingHolder, position: Int) {
holder.bindItem(items[position])
}
}
class BindingHolder(view: View): RecyclerView.ViewHolder(view) {
fun bindItem(item: Any) {
//Don't do this
val binding = ItemSampleBinding.bind(itemView)
}
}
数据绑定实例应该在 bind 方法之外初始化,因为 ViewHolders 可以被回收,并且在上面的代码中,我们可以尝试从已经绑定的视图创建绑定实例。
而是在 ViewHolder 的初始化块中创建绑定实例(这可以在init{}块中或在类声明之后,如下所示)
class BindingHolder(view: View): RecyclerView.ViewHolder(view) {
val binding = ItemSampleBinding.bind(view)
fun bindItem(item: Any) {
//Rest of ViewHolder logic
//binding.textView.text = "Something nice"
}
}
添加回答
举报