学习路径

  • 1, 入门篇

    • 1), 入门系列1-安装
    • 2), 入门系列2
    • 3), 入门系列2-2
    • 4), 入门系列3
  • 2, 专题篇
    • 1), Data-Mediator专题之属性回调
    • 2), Data-Mediator 专题之注解
    • 3), Data-Mediator专题之Api篇
  • 3, 源码阅读
    • 1), Data-Mediator 项目结构和源码阅读

简单demo

  • 1, 假设我要定义关于学生的数据模型, 需要实现Serializable, Parcelable. 假如学生有。年龄,名称, id属性。 那么简单的数据定义为:
@Fields({@Field(propName = "age" , type = int.class),@Field(propName = "name" , type = String.class),@Field(propName = "id" , type = long.class),
})
public interface Student extends Serializable, Parcelable{
}
复制代码
  • 2, 使用idea插件生成代码, 快捷键比如 alt + insert. (安装见这里Data-mediator入门系列1) 模型生成后类似这样
@Fields({@Field(propName = "age" , type = int.class),@Field(propName = "name" , type = String.class),@Field(propName = "id" , type = long.class),
})
public interface Student extends Serializable, Parcelable, DataPools.Poolable {Property PROP_age = SharedProperties.get(int.class.getName(), "age", 0);Property PROP_name = SharedProperties.get(String.class.getName(), "name", 0);Property PROP_id = SharedProperties.get(long.class.getName(), "id", 0);Student setAge(int age1);int getAge();Student setName(String name1);String getName();Student setId(long id1);long getId();
}
复制代码
  • 3, 调用示例。
     //属性改变demo. 下面用butterknife快速写demopublic class TestPropertyChangeActivity extends BaseActivity {@BindView(R.id.tv_desc)TextView mTv_desc;@BindView(R.id.bt_set_text_on_TextView)Button mBt_changeProperty;@BindView(R.id.bt_set_text_on_mediator)Button mBt_temp;DataMediator<Student> mMediator;@Overrideprotected int getLayoutId() {return R.layout.ac_test_double_bind;}@Overrideprotected void onInit(Context context, Bundle savedInstanceState) {mBt_changeProperty.setText("click this to change property");mBt_temp.setVisibility(View.GONE);//为数据模型创建  中介者。mMediator = DataMediatorFactory.createDataMediator(Student.class);//添加属性callbackmMediator.addDataMediatorCallback(new DataMediatorCallback<Student>() {@Overridepublic void onPropertyValueChanged(Student data, Property prop, Object oldValue, Object newValue) {Logger.w("TestPropertyChangeActivity","onPropertyValueChanged","prop = "+ prop.getName() + " ,oldValue = " + oldValue + " ,newValue = " + newValue);mTv_desc.setText(String.valueOf(newValue));}});mMediator.getDataProxy().setName("heaven7");}@OnClick(R.id.bt_set_text_on_TextView)public void onClickSetTextOnTextView(View v){mMediator.getDataProxy().setName("time: " + System.currentTimeMillis());}}
复制代码

该demo 做了3件事情。创建数据中介者,添加属性回调。然后在点击事件中改变了数据的属性。 结果使得日志被打印出来。而且textView也被更新。

对模型实现的代码感兴趣?

模型实现代码大致是这样的。

public class Student_$Impl implements Student, Serializable, Parcelable, DataPools.Poolable {private static final long serialVersionUID =  1L;public static final Parcelable.Creator<Student_$Impl> CREATOR = new Parcelable.Creator<Student_$Impl>() {@Overridepublic Student_$Impl createFromParcel(Parcel in) {return new Student_$Impl(in);}@Overridepublic Student_$Impl[] newArray(int size) {return new Student_$Impl[size];}};private int age;private String name;private long id;protected Student_$Impl(Parcel in) {this.age = in.readInt();this.name = in.readString();this.id = in.readLong();}public Student_$Impl() {}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(this.age);dest.writeString(this.name);dest.writeLong(this.id);}@Overridepublic void recycle() {DataPools.recycle(this);}@Overridepublic void clearProperties() {this.id = 0;this.age = 0;this.name = null;}@Overridepublic String toString() {Objects.ToStringHelper helper = Objects.toStringHelper(this).add("age", String.valueOf(this.age)).add("name", String.valueOf(this.name)).add("id", String.valueOf(this.id));return helper.toString();}public int getAge() {return age;}public Student setAge(int age1) {this.age = age1;return this;}public String getName() {return name;}public Student setName(String name1) {this.name = name1;return this;}public long getId() {return id;}public Student setId(long id1) {this.id = id1;return this;}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (!(o instanceof Student_$Impl)) {return false;}Student_$Impl that = (Student_$Impl) o;if (getAge() != that.getAge()) {return false;}if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null) {return false;}if (getId() != that.getId()) {return false;}return true;}
}复制代码

下一章

Data-mediator入门系列2-2

想要体验最新的特性 ?

请到github/data-mediator体验。 如果觉得不错,请star支持下项目哈。

欢迎大家star, fork,contribute ,提issue. 它会越来越棒。

Thanks for reading !

技术源于分享!

Data-mediator入门系列2相关推荐

  1. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  2. SAP PM 入门系列25 - 计量点

    SAP PM 入门系列25 - 计量点 计量点是物理上或逻辑上用于描述状态的一个点.该状态是用计量值来描述的.计量点的编号只能用系统内部编号.它用于维护计划中自动产生维护订单. IK07 显示一个计量 ...

  3. SAP PM 入门系列之19 - IP31 Maintenance Plan Costing

    SAP PM 入门系列之19 - IP31 Maintenance Plan Costing 在SAP系统里,我们可以为维护计划确定其在某个期间里预计的成本.不过前提条件是: · The mainte ...

  4. SAP PM 入门系列7 - 常用Function Modules

    SAP PM 入门系列7 - 常用Function Modules Function Module Description Object BADI_EQMT_MODIFY You can update ...

  5. SAP PM 入门系列6 - PM常用表

    SAP PM 入门系列6 - PM常用表 Equipment设备相关的数据表 EQUI: Equipment master data EQKT: Multilingual equipment shor ...

  6. ASP.NET AJAX入门系列(1):概述

    经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...

  7. ABP入门系列(7)——分页实现

    ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...

  8. 结构体怎么赋值_Go 经典入门系列 16:结构体

    点击上方蓝色"Go语言中文网"关注,每天一起学 Go 欢迎来到 Golang 系列教程的第 16 个教程. 什么是结构体? 结构体是用户定义的类型,表示若干个字段(Field)的集 ...

  9. ActiveMQ入门系列二:入门代码实例(点对点模式)

    在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...

  10. graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris

    数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...

最新文章

  1. React +antd +wangEditor 富文本编辑器
  2. 在线机房改造类项目建设难点的研究
  3. ESP8266串口模块的基本使用【转】
  4. python 中 __name__ 的使用
  5. 通过地址访问 mysql_MySql通过ip地址进行访问的方法
  6. codeforces 231A-C语言解题报告
  7. 灌醉茅台董事长拿到便宜酒?潘长江和茅台双双回应...
  8. 测试工程师,必须掌握的shell变量知识
  9. java监控网卡流量_流量监控脚本监控网卡
  10. Kali安装AWVS
  11. oracle北京时区,Oracle 时区 - Amazon Relational Database Service
  12. PHP-thinkPHP快速入门
  13. 让商家“二选一“,唯品会选错了自救道路?
  14. 通过MediaRecorder 录制视频的时候,魅族手机录制视频后,大小显示0
  15. redis主从+哨兵
  16. 《可爱女人》周杰伦 歌词
  17. 如何用python解方程?
  18. 肝一肝设计模式【四】-- 建造者模式
  19. ext3文件系统超级块损坏修复
  20. WIN10专业版安装docker不成功的两种解决思路

热门文章

  1. SQL创建数据库– PostgreSQL,MySQL,SQL Server
  2. scala案例_Scala案例类和案例对象深入(第1部分)
  3. 开课吧Java课堂:如何将用户定义的类存储于Collection中
  4. 【操作系统学习笔记】操作系统基础
  5. mongodb 的基本函数语法封装
  6. curl实现发送Get和Post请求(PHP)
  7. (转)[Unity3D]UI方案及制作细节(NGUI/EZGUI/原生UI系统) 内附unused-assets清除实例
  8. 通过VS2010性能分析来查找代码中那些地方最损耗资源
  9. 程序员面试金典——5.2二进制小数
  10. 牛客网–华为机试在线训练6:质数因子