Android(安卓)JetPack——DataBinding
16lz
2021-12-04
DataBinding的作用是直接让实体类的和布局中控件绑定,不需要代码中设置,只需给布局设置对象即可。
- DataBinding支持
android { compileSdkVersion 28 defaultConfig { applicationId "com.example.study" minSdkVersion 22 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } //需要添加DataBinding支持 dataBinding { enabled = true }}
使用之前需要添加DataBinding支持。Kotlin项目需要另外的配置。目前Demo项目是Java项目,不过是Java和Kotlin混合使用。
- 新建一个实体类
Book,书名、作者名两个属性,一个构造方法。
class Book { var name: String var author: String constructor(name: String, author: String) { this.name = name this.author = author }}
- 布局样式
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".activity.jetpack.DataBandingActivity"> <data> <variable name="Book" type="com.example.study.jetpack.model.Book" /> data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取数据" /> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:text='@{Book.name}' android:layout_height="wrap_content" /> <TextView android:id="@+id/tv_author" android:layout_width="wrap_content" android:text='@{Book.author}' android:layout_height="wrap_content" /> LinearLayout>layout>
和以往不同,根布局是layout标签。variable标签中指定实体类和名称,如果实体类名称有重复的情况,可以指定别名。
- Activity中使用
class DataBindingActivity : BaseActivity(), View.OnClickListener { companion object { fun start(context: Context) { val intent = Intent(context, DataBindingActivity::class.java) context.startActivity(intent) } } //实体类对象 lateinit var book: Book //布局构建的dataBanding对象 lateinit var dataBinding: ActivityDataBandingBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) dataBinding= DataBindingUtil.setContentView(this, R.layout.activity_data_banding) book = Book("呐喊", "鲁迅") //设置对象 dataBinding.book = book bt.setOnClickListener(this) } override fun onClick(v: View?) { //点击重新赋值对象 dataBinding.book = Book("射雕英雄传", "金庸") }}
布局建好之后,build一下就会生成一个ActivityDataBindingBinding文件,需要的就是实例化它并设置具体的数据。
和之前的使用也是很像的。注意布局和实例化DataBinding对象即可。
还有很多其它的功能,比如设置数据的时候怎么拼接字符串之类。
感觉也有些不好的地方,布局,实体类,获取数据的部分,看代码逻辑的话需要三部分来回切换了。
更多相关文章
- 类和 Json对象
- Android里把Dialog设置为全屏的方法
- 2011.09.26(5)——— android sample之Notepad(TitleEditor)
- android之HttpURLConnection
- 【Android代码片段之四】设置全屏
- [转]android 一直在最前面的浮动窗口效果
- Android继承AppCompatActivity设置全屏无标题
- android中自己画一个按钮,和自己设置一个框框
- Android中Bitmap对象和字节流之间的相互转换