我想将 imageview 与数据绑定适配器结合起来。我在谷歌上搜索我的问题。问题是 databindingadapter 在我的 XML 中不起作用。
说的简单点,其他的视图识别得很好,比如textView。如果我在 ImageView 输入变量名,颜色应该会改变,但不会改变。
这是我的代码
<data class> (databindingadapter)
import android.net.Uri
import android.widget.ImageView
import androidx.databinding.BindingAdapter
import com.squareup.picasso.Picasso
class Person {
val name = ""
val age = ""
var image = ""
}
object imageBindingAdapter {
val person = Person()
@JvmStatic
@BindingAdapter("image")
fun bindImage(imageView: ImageView) {
Picasso.get().load(Uri.parse(person.image))
.fit().centerCrop().into(imageView)
}
}
XML 代码
<?xml version="1.0" encoding="utf-8"?>
<layout>
<data>
<variable name="person"
type="com.example.kotlinerecyclerview.Person"/>
</data>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView android:layout_width="100dp" android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:src="@android:drawable/btn_default"
app:image="person.image"
/>
<TextView
android:text="@{person.name}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_name"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<TextView
android:text="@{String.valueOf(person.age)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/tv_name"
app:layout_constraintStart_toStartOf="parent"
android:id="@+id/tv_age"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
这是我的 recyclerview 适配器类
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.kotlinerecyclerview.databinding.ItemBinding
class ListAdapter(val items: List<Person>, private val clickListener:
(person: Person) -> Unit) :
RecyclerView.Adapter<ListAdapter.SampleViewHolder>() {
class SampleViewHolder(val binding: ItemBinding) :
RecyclerView.ViewHolder(binding.root)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int):
SampleViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.item, parent, false)
val holder = SampleViewHolder(ItemBinding.bind(view))
view.setOnClickListener {
clickListener.invoke(items[holder.adapterPosition])
}
return holder
}
override fun getItemCount() = items.size
override fun onBindViewHolder(holder: SampleViewHolder, position: Int) {
holder.binding.person = items[position]`enter code here`
}
}
我将此代码移至另一个类 ex) mainactivity,listadapter,但它不起作用。
我编写了其他有关数据绑定适配器的视频或文档中描述的代码。