使用 notifyPropertyChanged(BR.property)
告知数据的更改。
代码实例:
class MyItem : BaseObservable() {
@get:Bindable
var name: String = ""
set(value) {
field = value
notifyPropertyChanged(BR.name) // 通知名字更改
}
@get:Bindable
var age: Int = 0
set(value) {
field = value
notifyPropertyChanged(BR.age) // 通知年龄更改
}
}
MutableLiveData
列表:class MyViewModel : ViewModel() {
val items = MutableLiveData>()
// 添加或更新一个条目
fun addItem(item: MyItem) {
val list = items.value?.toMutableList() ?: mutableListOf()
val index = list.indexOfFirst { it.id == item.id }
if (index != -1) {
list[index] = item
} else {
list.add(item)
}
items.value = list
}
// 删除一个条目
fun removeItem(item: MyItem) {
val list = items.value?.toMutableList() ?: mutableListOf()
list.remove(item)
items.value = list
}
}
class MyAdapter : RecyclerView.Adapter() {
var items: List = emptyList()
set(value) {
field = value
notifyDataSetChanged() // 当数据更新时, 通知RecyclerView
}
inner class ViewHolder(private val binding: ItemBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item: MyItem) {
binding.item = item
binding.executePendingBindings() // 立即更新UI
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val binding = ItemBinding.inflate(inflater, parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder