Android 使用RecyclerView的数据绑定未正确呈现

Android 使用RecyclerView的数据绑定未正确呈现,android,android-recyclerview,android-databinding,android-jetpack,Android,Android Recyclerview,Android Databinding,Android Jetpack,我正在尝试将数据绑定与RecyclerView一起使用。我建立了一个简单的应用程序,在一个RecyclerView中显示数字1到50,每行一个。我想对每一行使用数据绑定 下面是我的适配器的代码(请注意,我调用了dataBinding.executePendingBindings()): 类simpledapter :ListAdapter(SimpleAdapterDiffUtil()){ 内部类SimpleAdapterViewHolder( 私有val数据绑定:SimpleAdapterVi

我正在尝试将数据绑定与RecyclerView一起使用。我建立了一个简单的应用程序,在一个RecyclerView中显示数字1到50,每行一个。我想对每一行使用数据绑定

下面是我的适配器的代码(请注意,我调用了
dataBinding.executePendingBindings()
):

类simpledapter
:ListAdapter(SimpleAdapterDiffUtil()){
内部类SimpleAdapterViewHolder(
私有val数据绑定:SimpleAdapterViewHolderBinding
):RecyclerView.ViewHolder(dataBinding.root){
趣味绑定(str:String){
Log.e(“MYTAG”,“设置文本视图:$str”)
dataBinding.txtView.text=str
dataBinding.executePendingBindings()
}
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):SimpleDapterViewHolder{
val绑定=SimpleAdapterViewHolderBinding.充气(
LayoutInflater.from(parent.context),parent,false)
返回SimpleAdapterViewHolder(绑定)
}
覆盖BindViewHolder(holder:SimpleAdapterViewHolder,位置:Int){
val stringValue=getItem(位置)
holder.bind(stringValue.toString())
}
}
私有类SimpleDatapterDiffutil:DiffUtil.ItemCallback(){
覆盖乐趣项相同(旧项:Int,新项:Int):布尔值{
返回oldItem==newItem
}
覆盖有趣的内容相同(oldItem:Int,newItem:Int):布尔值{
返回oldItem==newItem
}
}
这是视图XML


如您所见,在初始屏幕中,没有一行未正确渲染。当我向下滚动时,我发现它从第23行开始渲染。然后,如果我向后滚动,我最终可以看到前面的行被填充

如果我将代码更改为使用普通的旧视图,而不是数据绑定,它将按预期工作。代码如下:

//这很好用!
类simpledapter
:ListAdapter(SimpleAdapterDiffUtil()){
内部类SimpleAdapterViewHolder(
私有val根视图:视图
):RecyclerView.ViewHolder(根视图){
趣味绑定(str:String){
Log.e(“MYTAG”,“设置文本视图:$str”)
rootView.findviewbyd(R.id.txt_view).text=str
}
}
重写CreateViewHolder(父级:ViewGroup,viewType:Int):SimpleDapterViewHolder{
val rootView=LayoutInflater.from(parent.context)
.充气(右布局、简单适配器、视图、支架、父级、假)
返回SimpleDatapterViewHolder(rootView)
}
覆盖BindViewHolder(holder:SimpleAdapterViewHolder,位置:Int){
val stringValue=getItem(位置)
holder.bind(stringValue.toString())
}
}
私有类SimpleDatapterDiffutil:DiffUtil.ItemCallback(){
覆盖乐趣项相同(旧项:Int,新项:Int):布尔值{
返回oldItem==newItem
}
覆盖有趣的内容相同(oldItem:Int,newItem:Int):布尔值{
返回oldItem==newItem
}
}

正如我在xml中看到的,您正在设置
android:text=“@{text}”
换句话说,textView值是从
binding.text设置的
您设置了
dataBinding.txtView.text=str
,它将更新文本。在使用
executePendingDataBinding
之后,它的值将被重置为
dataBinding.text
(也称为
android:text=“@{text}”
),该值为null或空。所以你应该设定

dataBinding.text = str
而不是

dataBinding.txtView.text = str

请将您的xml附加为well@Amin当然这只是一个简单的布局:哇,谢谢!这正是原因。非常感谢你!