RecyclerView适配器+数据绑定 [英] RecyclerView Adapter + Data Binding
问题描述
好的,所以我试图在我的recyclerview适配器中实现数据绑定,并且我需要帮助,因为我不知道该怎么做?我正试图从我的recyclerview适配器中删除样板代码,这就是原因.在下面检查我的代码:
Okay so I'm trying to implement Data Binding in my recyclerview adapter, and I need help because I don't know how exactly? I'm trying to remove boilerplate code from my recyclerview adapter, that's why. Check my codes down bellow:
custom_row(Recyclerview项目布局)
<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<data>
<variable
name="toDoData"
type="com.jovanovic.stefan.tododemo.data.ToDoData" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/row_background"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="@drawable/item_background"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/title_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="16dp"
android:text="@{toDoData.title}"
android:textColor="@color/darkGray"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/description_txt"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:maxLength="160"
android:maxLines="3"
android:text="@{toDoData.description}"
android:textColor="@color/darkGray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/title_txt"
app:layout_constraintTop_toBottomOf="@+id/title_txt" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
ToDoData
@Parcelize
@Entity(tableName = "todo_table")
data class ToDoData(
@PrimaryKey(autoGenerate = true)
var id: Int,
var title: String,
var priority: Int,
var description: String
) : Parcelable
MyAdapter(Recyclerview适配器)
class MyAdapter: RecyclerView.Adapter<MyAdapter.MyViewHolder>() {
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.custom_row, parent, false)
return MyViewHolder(view)
}
override fun getItemCount(): Int {
TODO("Not yet implemented")
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
TODO("Not yet implemented")
}
}
推荐答案
您快到了.要完成您的实施,请遵循以下步骤.
You are almost there. To complete your implementation, follow the following.
在适配器中,创建将支持数据绑定的视图保持器.
In your adapter, create the view holder that will support data binding.
class ViewHolder private constructor(private val binding: CustomRowBinding)
: RecyclerView.ViewHolder(binding.root) {
fun bind(todo: ToDoData) {
binding.todo = toDoData
// make sure to include this so your view will be updated
binding.executePendingBindings()
}
companion object {
fun from(parent: ViewGroup): ViewHolder {
val layoutInflater = LayoutInflater.from(parent.context)
val binding = CustomRowBinding.inflate(layoutInflater, parent, false)
return ViewHolder(binding)
}
}
}
在您的oncreateViewHolder中
And in your oncreateViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder.from(parent)
}
最后是onBindViewHolder
And finally onBindViewHolder
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val todo = todoList[position] // this will be the list object you created
holder.bind(todo)
}
这篇关于RecyclerView适配器+数据绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!