android databinding 事件click事件绑定
2016-03-27 11:34
519 查看
1 单布局文件(不包含include的布局文件)click事件的绑定,请参考
Android官方数据绑定框架DataBinding
为什么不参考官方的呢?因为有坑,初学者慎入。
2 主要说说含有include的事件绑定方式。
AS中如果创建MainActivity ,会自动生成一个activity_main.xml和一个content_main.xml两个布局文件,好管理布局文件嘛
例如布局文件如下所示:
activity_main.xml
content_main.xml
参考官方文档,点击事件处理集中到一个普通的自定义类Handler类中进行处理(注:非android.os.Handler的子类)
MyHandlers
Activity的onCreate方法中主要代码片段:
其实除了生成一个ActivityMainBinding,还会生成一个对应于content_xxx.xml的ContentMainBinding,有关xxxBinding类的生成规则,请参考:http://developer.android.com/intl/zh-cn/tools/data-binding/guide.html#data_binding_layout_files
如果此时运行程序,发现content_main.xml的TextView控件的点击事件是无效的。这里涉及到一个include传递的过程,包括数据(data)和事件(event)。
你会发现,上面的activity_main.xml布局中含有
这里的bind:user1="@{user1}"就是传递数据到content_main.xml布局文件中,在解析布局文件的时候就可以使用activity_main.xml生成的对应的ActivityMainBinding中设置的数据了,同样适用于事件的处理器(Handler)的传递,
所以,在
加入bind:handler="@{handler}",再次运行程序,即可以看到事件绑定成功了。
需要注意的是,activity_main.xml中bind:xxx传递的xxx表示向content_main.xml中传递的xxx,必需在content_main.xml的<variable>标签定义的变量存在,从而自动生成的ContentMainBinding的该属性。
如本例中的bind:handler="@{handler}",在content_main.xml中已经定义了handler变量。
Android官方数据绑定框架DataBinding
为什么不参考官方的呢?因为有坑,初学者慎入。
2 主要说说含有include的事件绑定方式。
AS中如果创建MainActivity ,会自动生成一个activity_main.xml和一个content_main.xml两个布局文件,好管理布局文件嘛
例如布局文件如下所示:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <!--type中声明的就是我们的用户实体类User,一定要写全,带着包名,我们给这个实体类命名为user--> <data> <import type="com.zdj.databindingdemo.User"/> <import type="com.zdj.databindingdemo.MyHandlers"/> <variable name="user1" type="User"/> <variable name="handler" type="MyHandlers"/> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{handler.onClickView}" android:text="@{user1.name}"/> <include layout="@layout/content_main" bind:user1="@{user1}" /> </LinearLayout> </layout>
content_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <import type="com.zdj.databindingdemo.User" /> <import type="com.zdj.databindingdemo.MyHandlers" /> <variable name="user1" type="User" /> <variable name="handler" type="MyHandlers" /> </data> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{handler.onClickView}" android:text="@{user1.age,default=25}" /> </LinearLayout> </layout>
参考官方文档,点击事件处理集中到一个普通的自定义类Handler类中进行处理(注:非android.os.Handler的子类)
MyHandlers
public class MyHandlers { public void onClickView(View view){ Toast.makeText(view.getContext(), "绑定事件成功", Toast.LENGTH_SHORT).show(); }; }
Activity的onCreate方法中主要代码片段:
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); final User user = new User("loonggg", "23"); // 此处的setUser1 中的user1为 xml布局文件中的variable的name user1 binding.setUser1(user); binding.setHandler(new MyHandlers());
其实除了生成一个ActivityMainBinding,还会生成一个对应于content_xxx.xml的ContentMainBinding,有关xxxBinding类的生成规则,请参考:http://developer.android.com/intl/zh-cn/tools/data-binding/guide.html#data_binding_layout_files
如果此时运行程序,发现content_main.xml的TextView控件的点击事件是无效的。这里涉及到一个include传递的过程,包括数据(data)和事件(event)。
你会发现,上面的activity_main.xml布局中含有
<include layout="@layout/content_main" bind:user1="@{user1}" />
这里的bind:user1="@{user1}"就是传递数据到content_main.xml布局文件中,在解析布局文件的时候就可以使用activity_main.xml生成的对应的ActivityMainBinding中设置的数据了,同样适用于事件的处理器(Handler)的传递,
所以,在
<include layout="@layout/content_main" bind:user1="@{user1}" />
加入bind:handler="@{handler}",再次运行程序,即可以看到事件绑定成功了。
<include layout="@layout/content_main" bind:handler="@{handler}" bind:user1="@{user1}" />
需要注意的是,activity_main.xml中bind:xxx传递的xxx表示向content_main.xml中传递的xxx,必需在content_main.xml的<variable>标签定义的变量存在,从而自动生成的ContentMainBinding的该属性。
如本例中的bind:handler="@{handler}",在content_main.xml中已经定义了handler变量。
相关文章推荐
- android api-level
- Android定时器实现
- Android设计模式之装饰器模式
- Android开发之SmsManager和SmsMessage
- Android 应用界面开发笔记 Service
- Android Fragment嵌套ViewPager,ViewPager嵌套多个Fragment
- android 如何修改开机动画
- android系统开机动画设置方法介绍
- android代码上库流程
- 【Android】not allowed to send broadcast android.intent.action.MEDIA_MOUNTED
- Android Studio的常用设置
- Android ViewPager指示器 IndicatorBar
- 如何写圆角布局(布局加圆角表框)
- Android 工具类 Toast Log.d()
- Android.mk内容介绍
- Android中序列化的实现?使用Serializable还是Parcelable
- Android开发:按一定频率同时获取多个传感器数据
- Android性能优化之HashMap的替代者
- Android多屏幕支持Multi-WindowSupport
- Android5.0 源码编译