自定义双向绑定框架-只需一个注解,简单实用

前言

        本框架主要功能是实现了控件的双向绑定功能,只需要对控件加个注解即可,简化了配置,数据的改变能同步显示到界面,界面UI数据的变化能同步到数据模型里。

        

技术要点介绍

 本框架用的技术有:

   1、注解,BindView、OnClick

   2、注解处理器annotationProcessor,点击查看详细讲解

 3、javapoet生成文件,根据注解生成java文件,代码生成了findViewById 、事件监听、数据模型的监听以及界面UI的变化等。点击查看详细使用讲解

  4、AppCompatDelegate 对TextView、EditText做了全局替换。本方案可以用ASM插桩替换实现,逼格更高一点。

  5、性能消耗忽略不计,框架上的一些代码性能逻辑开销在编译时已经处理过了,所以在运行时消耗基本忽略不计。

使用说明

 1、初始化:

 

  protected void onCreate(Bundle savedInstanceState) {
    //本句代码在super.onCreate(savedInstanceState)之前
     ((MainActivity$$Injector)BindWay.getInstance().getInjector(this)).init(this);
      super.onCreate(savedInstanceState);
      setContentView(vdb.getRoot());
      //本句代码在setContentView之后
      injector = ((MainActivity$$Injector) BindWay.getInstance().bind(this));
    }

    MainActivity$$Injector为生成的java文件,命名规则为当前Activity的名字拼接上$$Injector字符串

    2、使用注解

       

@BindView(value = R.id.metlis, key = "dataet")
EditText metlis;
@BindView(value = R.id.mtvlis, key = "dataTv")
TextView mtvlis;
@BindView(value = R.id.mview, key = "dataView")
MView mview;
@BindView(value = R.id.mrg, key = "rbValue")
RadioGroup mrg;

        value是控件的id,key是数据对应的字段名

       基础控件只对TextView、EditText、RadioGroup做了支持,自定义的继承了TextView、EditText、RadioGroup这3个的组件也支持,其他的组件可自行补充。

        对于自定义的控件如MView,只支持内部布局为xml格式的,不支持代码生成的 如new TextView(content),因为AppCompatDelegate 只能对xml布局里的控件进行替换。

        自定义的控件需要对内部的TextView或者EditText加上tag,tag的格式为:"BTag:"+ BindView对应的key值,用于标记监听的控件。

        如:android:tag="BTag:dataView"

     3、设置数据

    

 injector.setData(key, value);

        如:

  injector.setData("dataView", "123");

     4、获取数据

        返回key对应的数据

       

 injector.getData(key)

       

        返回整个数据结构Map

  injector.getData()

总结

         在用vue开发APP的时候觉得vue的双向绑定太爽了,就看了下Vue2和vue3 的源码,想自己实现一个类似的框架。   

         google官方出品的DataBinding,实在是太难用,所以忙里偷闲大概花了3天左右的时间,终于把由来已久的想法实现了,初始化之后只需一个注解即可实现双向绑定,自己用了下 简直不要太好用,有时间后续其他控件也会逐渐补充,kotlin版本也会补充,欢迎大神指点,轻点喷

关注我获取更多知识或者投稿

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值