网站系统分类,网络营销案例图文ppt,企业官方网站怎么申请,化工建设信息网站什么叫databinding
数据绑定库是一种支持库#xff0c;借助该库#xff0c;您可以使用声明性格式#xff08;而非程序化地#xff09;将布局中的界面组件绑定到应用中的数据源。使用数据绑定可以简化 findViewById 。
如何使用
应用模块下 build.gradle 文件中添加 data…什么叫databinding
数据绑定库是一种支持库借助该库您可以使用声明性格式而非程序化地将布局中的界面组件绑定到应用中的数据源。使用数据绑定可以简化 findViewById 。
如何使用
应用模块下 build.gradle 文件中添加 dataBinding 元素如下
dataBinding {enabled true
}
单向绑定
activity_list
?xml version1.0 encodingutf-8?
layout xmlns:androidhttp://schemas.android.com/apk/res/androiddatavariablenameusertypecom.gxx.databinding.data.UserData //dataLinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text{user.userName} /TextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_marginTop10dpandroid:text{String.valueOf(user.age)} //LinearLayout
/layout
ListActivity
class ListActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)var binding DataBindingUtil.setContentViewActivityListBinding(this, R.layout.activity_list)binding.lifecycleOwner thisvar userData UserData()userData.age 10userData.userName 你好binding.user userData}
} UserData
class UserData {var userName: String? nullvar age: Int 0
}
可观察的数据对象
任何 plain-old 对象都可用于数据绑定但修改对象不会自动使界面更新。通过数据绑定数据对象可在其数据发生更改时通知其他对象即监听器可观察类有三种不同类型对象、字段和集合。当其中一个可观察数据对象绑定到界面并且该数据对象的属性发生更改时界面会自动更新。
结合 LiveData 将数据变化通知给界面
ViewModelActivity
class ViewModelActivity : AppCompatActivity() {private lateinit var userViewModel: UserViewModeloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)val binding DataBindingUtil.setContentViewActivityViewmodelBinding(this,R.layout.activity_viewmodel)binding.lifecycleOwner thisuserViewModel ViewModelProvider(this,ViewModelProvider.NewInstanceFactory()).get(UserViewModel::class.java)binding.viewModel userViewModel}
}
UserViewModel
class UserViewModel : ViewModel() {val userLiveData MutableLiveDataUserData()init {thread {for (x in 1..10) {Log.d(TAG, 服务器给你推送消息啦{叮咚声音}$x)val userData UserData()//userData.userName.set(接收服务器声音$x)userData.userName 接收服务器声音$xuserLiveData.postValue(userData)Thread.sleep(2000)}}}
}
class UserData : BaseObservable() {val userName: ObservableFieldString by lazy { ObservableFieldString() }var age: Int 0
}
?xml version1.0 encodingutf-8?
layout xmlns:androidhttp://schemas.android.com/apk/res/androiddatavariablenameviewModeltypecom.gxx.databinding.viewmodel.UserViewModel //dataLinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text{viewModel.userLiveData.userName} /EditTextandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text{viewModel.userLiveData.userName} //LinearLayout
/layout