Android开发-DataBinding基本使用
简述
Jetpack是谷歌发布的一系列辅助android开发者的实用工具,以帮助开发者构建出色的 Android 应用。Jetpack 里面包含4个部分的组件:Architecture、Foundation、Behavior 、UI 。数据绑定库是一种支持库,借助该库,您可以使用声明性格式(而非程序化地)将布局中的界面组件绑定到应用中的数据源。
作用:
1.将布局组件与源数据绑定,使源数据变化的同时布局组件及时同步更新。
2.减少Activity中View的定义(private View view)与初始化(findViewById),让Activity代码更专注于界面的逻辑更新。
3.可自定义适配器,实现扩展组件的属性功能。
4.可自定义事件,实现各种组件的事件触发功能。
特点:
1.使用简单,主要以声明的方式实现。
2.功能强大,可自定义适配器 & 事件 ,兼容各种界面逻辑需求。
简单示例
布局通常是使用调用界面框架方法的代码在 Activity 中定义的。
例如,之前代码调findViewById()来查找TextView控件并将其绑定到vm变量的中的 userName 属性:
TextView textView = findViewById(R.id.text);
textView.setText(vm.getUserName());
以下示例展示了如何在布局文件中使用数据绑定库将文本直接分配到微件。这样就无需调用上述任何 Java 代码。请注意赋值表达式中 @{} 语法的使用:
<TextView android:text="@{vm.userName}" />
借助布局文件中的绑定组件,您可以移除 Activity 中的许多界面框架调用,使其维护起来更简单、方便。还可以提高应用性能,并且有助于防止内存泄漏以及避免发生空指针异常。
首先,在你的项目开启DataBinding(build.gradle)
dataBinding {
enabled = true
}
1.创建bean类,用于封装数据
public class BasicBean {
private String city;
private String cnty;
private String id;
private String lat;
private String lon;
/** 省略getter setter方法 */
}
2.布局代码( 因篇幅有限,布局代码只显示关键代码 )
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/card_view_city_list"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</androidx.recyclerview.widget.RecyclerView>
RecyclerView item布局代码
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import alias="formatTextUtil"
type="com.tianye.utils.FormatTextUtil" ></import>
<variable name="basicBean" type="com.tianye.pojo.BasicBean"/>
</data>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/tv_city_area_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:text="@{basicBean.city}"></TextView>
<TextView
android:id="@+id/tv_city_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dimen_5d"
android:textColor="#868686"
android:text="@{basicBean.cnty}">
</TextView>
</LinearLayout>
3.MainActivity.java代码, CommonRecyclerViewAdapter 是RecyclerView的适配器,这里就不列出来了,weatherBeans是数据源,因为获取数据是耗时操作,建议使用子线程来获取,然后通知主线程更新ui
public class CityManagementActivity extends AppCompatActivity {
ActivityCityManagementBinding activityCityManagementBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layout.activity_city_management);
activityCityManagementBinding = DataBindingUtil.setContentView(this,R.layout.activity_city_management);
activityCityManagementBinding.rlCityManagementAdd.setOnClickListener(this);
CommonRecyclerViewAdapter<WeaterInfo> adapter = new CommonRecyclerViewAdapter<>(this, this.getLayoutInflater(), R.layout.city_management_list_itme, BR.cityWeaterInfo, weatherBeans
);
activityCityManagementBinding.cardViewCityList.setLayoutManager(new LinearLayoutManager(context));
activityCityManagementBinding.cardViewCityList.setAdapter(adapter);
}
- 说明:
1.RecyclerView的item布局代码中布局最外层使用Layout标签进行包裹,layout你可以手动敲,建议按alt+回车方式更改
2.MainActivity 中的ActivityCityManagementBinding类是自动生成的类。生成的绑定类将布局变量与布局中的视图关联起来。绑定类的名称和包可以自定义。所有生成的绑定类都是从 ViewDataBinding 类继承而来的。系统会为每个布局文件生成一个绑定类。
默认情况下,类名称基于布局文件的名称,它会转换为 Pascal 大小写形式并在末尾添加 Binding 后缀。以上布局文件名为 activity_city_management.xml,因此生成的对应类为 ActivityCityManagementBinding。此类包含从布局属性(例如,user 变量)到布局视图的所有绑定,并且知道如何为绑定表达式指定值。
运行结果 注:因上面省略了很多布局代码,显示效果肯定不一致。
推荐阅读