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 变量)到布局视图的所有绑定,并且知道如何为绑定表达式指定值。

运行结果 注:因上面省略了很多布局代码,显示效果肯定不一致。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值