android绑定单击事件,android databinding 事件click事件绑定

1 单布局文件(不包含include的布局文件)click事件的绑定,请参考

为什么不参考官方的呢?因为有坑,初学者慎入。

2 主要说说含有include的事件绑定方式。

AS中如果创建MainActivity ,会自动生成一个activity_main.xml和一个content_main.xml两个布局文件,好管理布局文件嘛

例如布局文件如下所示:

activity_main.xml

name="user1"

type="User"/>

name="handler"

type="MyHandlers"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/tv_name"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="@{handler.onClickView}"

android:text="@{user1.name}"/>

bind:user1="@{user1}"  />

content_main.xml

name="user1"

type="User" />

name="handler"

type="MyHandlers" />

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="@{handler.onClickView}"

android:text="@{user1.age,default=25}" />

参考官方文档,点击事件处理集中到一个普通的自定义类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

如果此时运行程序,发现content_main.xml的TextView控件的点击事件是无效的。这里涉及到一个include传递的过程,包括数据(data)和事件(event)。

你会发现,上面的activity_main.xml布局中含有

bind:user1="@{user1}"  />

这里的bind:user1="@{user1}"就是传递数据到content_main.xml布局文件中,在解析布局文件的时候就可以使用activity_main.xml生成的对应的ActivityMainBinding中设置的数据了,同样适用于事件的处理器(Handler)的传递,

所以,在

bind:user1="@{user1}"  />

加入bind:handler="@{handler}",再次运行程序,即可以看到事件绑定成功了。

bind:handler="@{handler}"

bind:user1="@{user1}"  />

需要注意的是,activity_main.xml中bind:xxx传递的xxx表示向content_main.xml中传递的xxx,必需在content_main.xml的标签定义的变量存在,从而自动生成的ContentMainBinding的该属性。

如本例中的bind:handler="@{handler}",在content_main.xml中已经定义了handler变量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值