app下的build.gradle加入
android{
...
dataBinding{
enabled = true
}
...
}
项目的g radle.propeties加入
android.databinding.enableVZ = true
Item布局文件
<?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>
<import type="com.fenririnc.stagetwoui.model.Book"></import>
<variable
name="book"
type="Book" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/iv_name"
android:layout_width="wrap_content"
android:layout_height="40dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
android:gravity="center"
android:text="@{book.name}"
tools:text="默认名字"></TextView>
<TextView
android:id="@+id/iv_price"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:text="@{book.price+``}"
tools:text="默认价格"></TextView>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
适配器a da pter以及viewholder
class BookAdapter(lister:MutableList<Book>):RecyclerView.Adapter<BookAdapter.MyViewHolder>(){
val listofData:MutableList<Book>
init {
this.listofData = lister
}
class MyViewHolder(itemdatabind:ItemBookRecycleviewBinding):RecyclerView.ViewHolder(itemdatabind.root){
var itemDataBind:ItemBookRecycleviewBinding
init {
this.itemDataBind = itemdatabind
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BookAdapter.MyViewHolder {
val myViewHolder:MyViewHolder = MyViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent.context),
R.layout.item_book_recycleview,parent,false))
myViewHolder.itemDataBind.ivName.setOnClickListener {
val book:Book = listofData.get(myViewHolder.adapterPosition)
Toast.makeText(parent.context,if (book==null) "" else book.name,Toast.LENGTH_SHORT).show()
}
return myViewHolder
}
override fun getItemCount(): Int {
return listofData.size
}
override fun onBindViewHolder(holder: BookAdapter.MyViewHolder, position: Int) {
val book:Book = listofData.get(position)
holder.itemDataBind.book = book
}
}
实体类
data class Book(var name:String,var price:Int) {
}
活动布局文件
<?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">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_book"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
活动类
class DataBindActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val myBind:ActivityDataBindBinding = DataBindingUtil.setContentView(this,R.layout.activity_data_bind)
val manager:LinearLayoutManager = LinearLayoutManager(this)
val adapter:BookAdapter = BookAdapter(getData())
myBind.rvBook.layoutManager = manager
myBind.rvBook.adapter = adapter
}
fun getData():MutableList<Book>{
var lister:MutableList<Book> = mutableListOf()
val book1 = Book("钢铁是怎么练成的",12)
val book2 = Book("钢是怎么练成的",13)
val book3 = Book("铁是怎么练成的",14)
val book4 = Book("钢铁是练成的",15)
val book5 = Book("钢铁是成的",16)
val book6 = Book("是怎么练成的",17)
lister.add(book1)
lister.add(book2)
lister.add(book3)
lister.add(book4)
lister.add(book5)
lister.add(book6)
return lister
}
}