android databinding 事件click事件绑定

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

    

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布局中含有

    这里的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的标签定义的变量存在,从而自动生成的ContentMainBinding该属性。

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


转载于:https://my.oschina.net/zhangdengjiexuyu/blog/648078

你可能感兴趣的:(android databinding 事件click事件绑定)