Data-mediator入门系列2
学习路径
- 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相关推荐
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- SAP PM 入门系列25 - 计量点
SAP PM 入门系列25 - 计量点 计量点是物理上或逻辑上用于描述状态的一个点.该状态是用计量值来描述的.计量点的编号只能用系统内部编号.它用于维护计划中自动产生维护订单. IK07 显示一个计量 ...
- SAP PM 入门系列之19 - IP31 Maintenance Plan Costing
SAP PM 入门系列之19 - IP31 Maintenance Plan Costing 在SAP系统里,我们可以为维护计划确定其在某个期间里预计的成本.不过前提条件是: · The mainte ...
- SAP PM 入门系列7 - 常用Function Modules
SAP PM 入门系列7 - 常用Function Modules Function Module Description Object BADI_EQMT_MODIFY You can update ...
- SAP PM 入门系列6 - PM常用表
SAP PM 入门系列6 - PM常用表 Equipment设备相关的数据表 EQUI: Equipment master data EQKT: Multilingual equipment shor ...
- ASP.NET AJAX入门系列(1):概述
经常关注我的Blog的朋友可能注意到了,在我Blog的左边系列文章中,已经移除了对Atlas学习手记系列文章的推荐,因为随着ASP.NET AJAX 1.0 Beta版的发布,它们已经不再适用,为了不 ...
- ABP入门系列(7)——分页实现
ABP入门系列目录--学习Abp框架之实操演练 完成了任务清单的增删改查,咱们来讲一讲必不可少的的分页功能. 首先很庆幸ABP已经帮我们封装了分页实现,实在是贴心啊. 来来来,这一节咱们就来捋一捋如何 ...
- 结构体怎么赋值_Go 经典入门系列 16:结构体
点击上方蓝色"Go语言中文网"关注,每天一起学 Go 欢迎来到 Golang 系列教程的第 16 个教程. 什么是结构体? 结构体是用户定义的类型,表示若干个字段(Field)的集 ...
- ActiveMQ入门系列二:入门代码实例(点对点模式)
在上一篇<ActiveMQ入门系列一:认识并安装ActiveMQ(Windows下)>中,大致介绍了ActiveMQ和一些概念,并下载.安装.启动他,还访问了他的控制台页面. 这篇,就用代 ...
- graphviz 画决策树_数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris
数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iris 加载数据集 数据特征 训练 随机森林 调参工程师 结尾 数据挖掘入门系列教程(四)之基于scikit-lean决策树处理Iri ...
最新文章
- React +antd +wangEditor 富文本编辑器
- 在线机房改造类项目建设难点的研究
- ESP8266串口模块的基本使用【转】
- python 中 __name__ 的使用
- 通过地址访问 mysql_MySql通过ip地址进行访问的方法
- codeforces 231A-C语言解题报告
- 灌醉茅台董事长拿到便宜酒?潘长江和茅台双双回应...
- 测试工程师,必须掌握的shell变量知识
- java监控网卡流量_流量监控脚本监控网卡
- Kali安装AWVS
- oracle北京时区,Oracle 时区 - Amazon Relational Database Service
- PHP-thinkPHP快速入门
- 让商家“二选一“,唯品会选错了自救道路?
- 通过MediaRecorder 录制视频的时候,魅族手机录制视频后,大小显示0
- redis主从+哨兵
- 《可爱女人》周杰伦 歌词
- 如何用python解方程?
- 肝一肝设计模式【四】-- 建造者模式
- ext3文件系统超级块损坏修复
- WIN10专业版安装docker不成功的两种解决思路
热门文章
- SQL创建数据库– PostgreSQL,MySQL,SQL Server
- scala案例_Scala案例类和案例对象深入(第1部分)
- 开课吧Java课堂:如何将用户定义的类存储于Collection中
- 【操作系统学习笔记】操作系统基础
- mongodb 的基本函数语法封装
- curl实现发送Get和Post请求(PHP)
- (转)[Unity3D]UI方案及制作细节(NGUI/EZGUI/原生UI系统) 内附unused-assets清除实例
- 通过VS2010性能分析来查找代码中那些地方最损耗资源
- 程序员面试金典——5.2二进制小数
- 牛客网–华为机试在线训练6:质数因子