主要的Api
- 1, 数据中介者工厂 DataMediatorFactory
- 介绍: DataMediatorFactory.负责创建数据模型实现data-impl, 数据中介者DataMediator, 数据绑定相关DataBinding.
public final class DataMediatorFactory {
//创建数据绑定,并绑定指定数据,返回该Binder
public static <T> Binder<T> bind(Object target, T data);
//创建数据绑定,并绑定指定数据,返回该Binder. index 用于多module的数据绑定
public static <T> Binder<T> bind(Object target, T data, int index)''
//创建数据绑定,并绑定指定数据,返回该Binder. index 用于多module的数据绑定
public static <T> Binder<T> bind(Object target, T data,
int index, PropertyInterceptor interceptor);
//创建数据绑定 (为指定目标--数据绑定注解使用的类)
public static <T> DataBinding<T> createDataBinding(T target);
//从池子中获取数据(数据缓存用的)
public static <T> T obtainData(Class<T> clazz);
//根据数据模型,创建数据
public static <T> T createData(Class<T> clazz);
//根据数据模型创建数据的中介者。
public static <T> DataMediator<T> createDataMediator(Class<T> clazz)
//根据指定是数据创建数据中介者
public static <T> DataMediator<T> createDataMediator(T t);
//创建数据中介者。根据指定的根中介者和数据(属性链绑定的时候用的)
public static <T> DataMediator<T> createDataMediator(DataMediator<?> root, T t);
//根据数据中介者创建Binder
public static <T> Binder<T> createBinder(DataMediator<T> mediator);
//根据模型创建Binder
public static <T> Binder<T> createBinder(Class<T> moduleClass);
//根据模型数据 创建Binder
public static <T> Binder<T> createBinder(T module);
}
复制代码
- 2, 数据中介者 DataMediator
- 介绍: 这个是整个框架的核心。负责连接数据模型实现和数据模型代理。
public final class DataMediator<T> {
//获取基本的中介者
public final BaseMediator<T> getBaseMediator(){
return mediator;
}
/**
根据收集器的标志,启动批属性回调。
* <p> Here is a demo.
* <pre>
* DataMediator{@literal <}Student{@literal >} dm = ...;
* dm.beginBatchedDispatches(CollectorManagerImpl.FLAGS_ALL);
* dm.getDataProxy().setId(xx)
* .setName(xxx)
* .setGrade(xxx)...;
* PropertyEventReceiver receiver = ...;
* dm.endBatchedDispatches(receiver);
* </pre>
* </p>
* @param collectorFlags the flags of collector. see {@linkplain CollectorManager#FLAG_SIMPLE},
* {@linkplain CollectorManager#FLAG_LIST}, {@linkplain CollectorManager#FLAG_SPARSE_ARRAY}
* @since 1.4.4
*/
public void beginBatchedDispatches(int collectorFlags);
//结束批属性回调并将收集的事件传递给接收者
public void endBatchedDispatches(final @Nullable PropertyEventReceiver receiver);
//丢弃之前开启批属性回调后接收到的事件。
public void dropBatchedDispatches();
//获取数据
public final T getData();
//获取数据代理
public final T getDataProxy();
//填充属性链(用于属性链的绑定)
public void inflatePropertyChain(String propertyChain);
//是否应该重新填充属性链(用于属性链的绑定)
public boolean shouldReinflatePropertyChains();
//重新填充属性链, 之前失败了后可以用此方法(用于属性链的绑定)
public boolean reinflatePropertyChains();
//获取指定数据填充的回调
public List<DataMediatorCallback> getInflateCallbacks(Object data);
//获取数据消费者
public DataConsumer<? super T> getDataConsumer() ;
//设置数据消费者
public void setDataConsumer(DataConsumer<? super T> mConsumer);
//获取属性拦截器.影响apply
public PropertyInterceptor getPropertyInterceptor();
//设置属性拦截器。影响apply
public void setPropertyInterceptor(PropertyInterceptor interceptor);
//获取是否相等的比较器
public EqualsComparator getEqualsComparator() ;
//设置是否相等的比较器
public void setEqualsComparator(EqualsComparator comparator);
//应用当前的属性。会被已经设置的属性拦截器影响
public void applyProperties();
//应用当前的属性。会被指定的属性拦截器影响
public void applyProperties(PropertyInterceptor interceptor);
//启动 action mode
public ActionMode<T> startActionMode(ActionMode.Callback<T> callback);
//=======================================================
//添加回调
public void addDataMediatorCallback(DataMediatorCallback<? super T> callback);
//移除回调
public void removeDataMediatorCallback(DataMediatorCallback<? super T> callback);
//移除所有回调
public void removeDataMediatorCallbacks() {
mediator.removeCallbacks();
}
}
复制代码
- 3, 字段标志类FieldFlags
public final class FieldFlags {
//标识属性是数组类型
public static final int COMPLEX_ARRAY = 1;
//标识属性是list类型
public static final int COMPLEX_LIST = 2;
//标识属性是sparse array类型
public static final int COMPLEX_SPARSE_ARRAY = 3;
//transient标志。表示不被Serializable序列化
public static final int FLAG_TRANSIENT = 0x00000001;
//volatile标志
public static final int FLAG_VOLATILE = 0x00000002;
//内置接口 ISnapable 标志, 表示字段是否参加这个接口的方法
public static final int FLAG_SNAP = 0x00000004;
//内置接口 IShareable 标志,表示字段是否参加这个接口的方法
public static final int FLAG_SHARE = 0x00000008;
//内置接口 ICopyable 标志, 表示字段是否参加这个接口的方法
public static final int FLAG_COPY = 0x00000010;//16
//内置接口 IResetable 标志, 表示字段是否参加这个接口的方法
public static final int FLAG_RESET = 0x00000020;//32
//toString()方法标志,表示字段是否参加toString
public static final int FLAG_TO_STRING = 0x00000040; //64
//android parcelable接口方法标志,表示字段是否参加parcelable
public static final int FLAG_PARCELABLE = 0x00000080; //128
//@Expose标志。表示@Expose注解 默认 serialize = true, deserialize = true.
public static final int FLAG_EXPOSE_DEFAULT = 0x00000100;//256
//@Expose标志。表示@Expose注解 serialize = false
public static final int FLAG_EXPOSE_SERIALIZE_FALSE = 0x00000200;//512
//@Expose标志。表示@Expose注解 deserialize = false
public static final int FLAG_EXPOSE_DESERIALIZE_FALSE = 0x00000400;//1024
//Gson序列化标志,标识字段是否参加Gson的序列化和反序列化。
public static final int FLAG_GSON_PERSISTENCE = 0x00000800;//2048
//hashCode()方法标志,表示字段是否参加hashCode
public static final int FLAG_HASH = 0x00001000;
//equals()方法标志,表示字段是否参加equals
public static final int FLAG_EQUALS = 0x00002000;
/**
* 复合标志。
* @see #FLAG_SNAP
* @see #FLAG_RESET
* @see #FLAG_SHARE
* @see #FLAG_COPY
* @see #FLAG_PARCELABLE
* @see #FLAG_TO_STRING
* @see #FLAG_HASH
* @see #FLAG_EQUALS
* @see #FLAG_GSON_PERSISTENCE
*/
public static final int FLAGS_ALL_SCOPES = FLAG_SNAP | FLAG_RESET | FLAG_SHARE
| FLAG_COPY | FLAG_PARCELABLE | FLAG_TO_STRING
| FLAG_HASH | FLAG_EQUALS | FLAG_GSON_PERSISTENCE;
/**
* 复合标志。
* @see #FLAG_COPY
* @see #FLAG_PARCELABLE
* @see #FLAG_TO_STRING
* @see #FLAG_GSON_PERSISTENCE
* @since 1.0.7
*/
public static final int FLAGS_MAIN_SCOPES = FLAG_COPY | FLAG_PARCELABLE | FLAG_TO_STRING | FLAG_GSON_PERSISTENCE;
/**
*复合标志
* <pre>{@literal @}Expose(serialize = false,
deserialize = false) </pre>
* @see #FLAG_EXPOSE_DEFAULT
* @see #FLAG_EXPOSE_SERIALIZE_FALSE
* @see #FLAG_EXPOSE_DESERIALIZE_FALSE
* @since 1.0.7
*/
public static final int FLAGS_NO_EXPOSE = FLAG_EXPOSE_DEFAULT | FLAG_EXPOSE_SERIALIZE_FALSE | FLAG_EXPOSE_DESERIALIZE_FALSE;
/**
* 复合标志. which have multi flags. relative to {@linkplain #FLAGS_MAIN_SCOPES} , {@linkplain #FLAG_EQUALS}
* add {@linkplain #FLAG_HASH}.
* @see #FLAG_COPY
* @see #FLAG_PARCELABLE
* @see #FLAG_TO_STRING
* @see #FLAG_GSON_PERSISTENCE
* @see #FLAG_HASH
* @see #FLAG_EQUALS
* @since 1.1.1
*/
public static final int FLAGS_MAIN_SCOPES_2 = FLAGS_MAIN_SCOPES | FLAG_HASH | FLAG_EQUALS;
/**
* 复合标志 . which have multi flags. relative to {@linkplain #FLAGS_MAIN_SCOPES}.
* add {@linkplain #FLAG_EQUALS}. without {@linkplain #FLAG_HASH}
* @see #FLAG_COPY
* @see #FLAG_PARCELABLE
* @see #FLAG_TO_STRING
* @see #FLAG_GSON_PERSISTENCE
* @see #FLAG_EQUALS
* @since 1.4.4
*/
public static final int FLAGS_MAIN_SCOPES_3 = FLAGS_MAIN_SCOPES | FLAG_EQUALS;
}
复制代码
- 4, 属性回调 DataMediatorCallback
public abstract class DataMediatorCallback<T> {
//属性改变时被调用
void onPropertyValueChanged(T data, Property prop, Object oldValue, Object newValue);
//属性应用时被调用
void onPropertyApplied(T data, Property prop, Object value);
//List属性回调,当添加元素时被调用
void onAddPropertyValues(T data, Property prop, Object newValue, Object addedValue);
//List属性回调,当添加元素时被调用
void onAddPropertyValuesWithIndex(T data, Property prop,
Object newValue, Object addedValue, int index);
//List属性回调,当删除元素时被调用
void onRemovePropertyValues(T data, Property prop, Object newValue, Object removeValue);
//List属性回调,当元素改变时被调用
void onPropertyItemChanged(T data, Property prop, Object oldItem, Object newItem, int index);
//SparseArray属性回调
public SparseArrayPropertyCallback<T> getSparseArrayPropertyCallback();
}
复制代码
public interface SparseArrayPropertyCallback{
//当一个映射的value改变时调用
void onEntryValueChanged(T data , Property prop, K key, Object oldValue, Object newValue);
//当添加一条映射时改变时调用
void onAddEntry(T data , Property prop, K key, Object value);
//当删除一条映射时改变时调用
void onRemoveEntry(T data , Property prop, K key, Object value);
//当清空SparseArray时调用
void onClearEntries(T data, Property prop, Object entries);
}
复制代码
想要体验最新的特性 ?
请到github/data-mediator体验。 如果觉得不错,请star支持下项目哈。