diff --git a/CHANGELOG.md b/CHANGELOG.md index eb146cb02..2dd83cdbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,16 @@ # 更新日志(CHANGELOG) -### 1.5.x 计划 +### 2.0.x 计划 TODO + +1. 尝试 Kotlin 化 + +### 1.6.x 计划 TODO + +1. 增加 DataBinding 支持 +2. 迁移 androidx + +### 1.5.x 计划 TODO 对齐脑子里的组件化设计思想,改了一堆名字,要挨骂了~ @@ -24,9 +33,9 @@ 注意:暂时只支持单模块应用。 -### 1.2 : Add `@Flap` annotation ! +### 1.2 : Add `@Component` annotation ! -1.2 的主要功能是为 `Flap` 增加注解功能 `@Flap` ,通过注解自动生成 FlapItem 的工厂类,帮助减少样板代码的编写。 +1.2 的主要功能是为 `Flap` 增加注解功能 `@Component` ,通过注解自动生成 FlapItem 的工厂类,帮助减少样板代码的编写。 1. Add `flap-annotations` project 2. Add `flap-compiler` project diff --git a/README.md b/README.md index 0750e3cc9..d04f44192 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Flap 重点类先知: -- `FlapItem`,它是 `Flap` 对原生 `ViewHolder` 的封装扩展,提供了更多优秀的功能以及便捷的方法,将你原来的 `ViewHolder` 继承它即可(可以理解为一个有更多功能的 `ViewHolder`); +- `FlapComponent`,它是 `Flap` 对原生 `ViewHolder` 的封装扩展,提供了更多优秀的功能以及便捷的方法,将你原来的 `ViewHolder` 继承它即可(可以理解为一个有更多功能的 `ViewHolder`); - `FlapAdapter` 是对 `RecyclerView.Adapter` 的封装扩展,优化了大量逻辑,如解耦了 `ViewHolder` 创建以及绑定等相关逻辑,让 `Adapter` 更加易用; @@ -29,10 +29,10 @@ Flap 重点类先知: -1. `Flap` 优化了 `FlapItem` 与 `ItemViewType` 的绑定逻辑,**默认使用 ViewHolder 的 布局Id(也即 layoutId)作为它的 ItemViewType**,并做自动关联,你再也不需要自定义多余且烦人的常量!!; -2. **使用工厂模式为 FlapItem 的创建提供支持**:而且,你可以**跟** `new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.xxx, parent, false)));` **这种没营养但是又烦人的样板代码说再见!**; -3. **优化 FlapItem 的创建过程**:FlapItem 的创建过程不像传统的 ViewHolder 那样混乱,真正做到了「开闭原则」,让你**不再迷失于混乱的 if else 、switch 堆中**,轻松面对各种加类型的需求; -4. **绑定 ViewHolder 的最佳实践**:遵从**关注点分离**,**完全解耦 FlapItem 的创建以及绑定过程**,你不需要关注 FlapItem 是怎么创建的,而只需要关注 `onBind()` 方法来处理你的数据绑定逻辑即可; +1. `Flap` 优化了 `FlapComponent` 与 `ItemViewType` 的绑定逻辑,**默认使用 ViewHolder 的 布局Id(也即 layoutId)作为它的 ItemViewType**,并做自动关联,你再也不需要自定义多余且烦人的常量!!; +2. **使用工厂模式为 FlapComponent 的创建提供支持**:而且,你可以**跟** `new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.xxx, parent, false)));` **这种没营养但是又烦人的样板代码说再见!**; +3. **优化 FlapComponent 的创建过程**:FlapComponent 的创建过程不像传统的 ViewHolder 那样混乱,真正做到了「开闭原则」,让你**不再迷失于混乱的 if else 、switch 堆中**,轻松面对各种加类型的需求; +4. **绑定 ViewHolder 的最佳实践**:遵从**关注点分离**,**完全解耦 FlapComponent 的创建以及绑定过程**,你不需要关注 FlapComponent 是怎么创建的,而只需要关注 `onBind()` 方法来处理你的数据绑定逻辑即可; @@ -40,12 +40,12 @@ Flap 重点类先知: -1. `FlapItem` 内置成员变量 `context` 可以轻松获取 `context` 对象; -2. `FlapItem` 内置 `findViewById(@IdRes int viewId)` 方法,替代`itemView.findViewById`,提高效率; -3. `FlapItem` 提供 `onViewAttachedToWindow` 和 `onViewDetachedFromWindow` 方法的回调,你可以通过重写轻松获取; +1. `FlapComponent` 内置成员变量 `context` 可以轻松获取 `context` 对象; +2. `FlapComponent` 内置 `findViewById(@IdRes int viewId)` 方法,替代`itemView.findViewById`,提高效率; +3. `FlapComponent` 提供 `onViewAttachedToWindow` 和 `onViewDetachedFromWindow` 方法的回调,你可以通过重写轻松获取; 4. 内置 `DifferFlapAdapter` 支持 `AsyncListDiffer` ——目前 RecyclerView **最高效的刷新数据的方式**,让你一次集成就达到最佳的优化效果; -5. 默认设置全局的 `RecycledViewPool` ,并支持自定义设置:让每个创建过的 `FlapItem` 得到充分使用; -6. 内置 `LifecycleItem` :支持感知 Activity/Fragment 的生命周期事件,**让你轻松面对类似 暂停/重播视频 这种依赖于生命周期的需求**; +5. 默认设置全局的 `RecycledViewPool` ,并支持自定义设置:让每个创建过的 `FlapComponent` 得到充分使用; +6. `FlapComponent` 支持感知 Activity/Fragment 的生命周期事件,**让你轻松面对类似 暂停/重播视频 这种依赖于生命周期的需求**; @@ -97,17 +97,17 @@ public class SimpleTextModel { } ``` -#### Step 2 : 创建一个 `FlapItem` 并用`@Flap`修饰 : +#### Step 2 : 创建一个 `FlapComponent` 并用`@Component`修饰 : -注:`FlapItem` 是一个 `ViewHolder` ,在 `Flap` 内部使用 ,是 `Flap` 的基础,把你原来的 `ViewHolder` 继承它即可。 +注:`FlapComponent` 是一个 `ViewHolder` ,在 `Flap` 内部使用 ,是 `Flap` 的基础,把你原来的 `ViewHolder` 继承它即可。 -需要在 @Flap 注解中给 `layoutId` 赋值为该 Item 的布局 id ,这样你就不需要自己写 ViewHolder 的实例化啦。 +需要在 @Component 注解中给 `layoutId` 赋值为该 Item 的布局 id ,这样你就不需要自己写 ViewHolder 的实例化啦。 举个🌰 : ```java -@Flap(layoutId = R.layout.flap_item_simple_text) -public class SimpleTextItem extends FlapItem { +@Component(layoutId = R.layout.flap_item_simple_text) +public class SimpleTextItem extends FlapComponent { private static final String TAG = "SimpleTextItem"; @@ -158,22 +158,18 @@ recyclerView.setAdapter(adapter); -### 与 Lifecycle 完美结合的产物:LifecycleItem +### 能感知生命周期事件的组件 -在一些业务场景下我们在 `ViewHolder` 中需要感知生命周期,`Flap` 内置了一个 `LifecycleItem` ,通过继承它你就可以得到`onResume` 、`onPause`、`onStop`、`onDestroy` 的回调。 - - - -如果觉得不够,你也加更多的方法,甚至你可以让你的 FlapItem 实现 `LifecycleObserver` 接口,`FlapAdapter` 会帮你自动绑定 `LifecycleOwner` ,生命周期问题从此不再出现。 +在一些业务场景下我们在 `ViewHolder` 中需要感知生命周期,在 `FlapComponent` 你可以重写`onResume` 、`onPause`、`onStop`、`onDestroy` 方法,得到回调。 +如果觉得不够,你也加更多的方法。 +`FlapAdapter` 会帮你自动绑定 `LifecycleOwner` ,生命周期问题从此不再出现。 相关的方法: - - 1. `FlapAdapter.setLifecycleEnable(boolean lifecycleEnable) ` 默认开启 2. `FlapAdapter.setLifecycleOwner(@NonNull final LifecycleOwner lifecycleOwner)` @@ -194,18 +190,15 @@ recyclerView.setAdapter(adapter); 版本变更详情请看: [CHANGELOG](./CHANGELOG.md) 。 - - - ## FAQ -#### 1. 如何设置 FlapItem 的点击事件? +#### 1. 如何设置 FlapComponent 的点击事件? -答:Flap 并没有提供一个全局的点击事件处理方法,而是推荐在 FlapItem 的 onBind 方法里给 itemView 设置 onClick 事件,这样更清晰。 +答:Flap 并没有提供一个全局的点击事件处理方法,而是推荐在 FlapComponent 的 onBind 方法里给 itemView 设置 onClick 事件,这样更清晰。 -#### 2. 我想在 FlapItem 里用 context 怎么办? +#### 2. 我想在 FlapComponent 里用 context 怎么办? -答:`FlapItem` 有个字段 `context` 你可以直接访问使用。 +答:`FlapComponent` 有个字段 `context` 你可以直接访问使用。 #### 3. Flap 有上拉加载、Header/Footer的功能吗? diff --git a/README_EN.md b/README_EN.md index 37cfee267..77fd1340b 100644 --- a/README_EN.md +++ b/README_EN.md @@ -79,7 +79,7 @@ NOTE: `FlapItem` is the base `ViewHolder` that `Flap` is using internally. Here is a sample : ```java -@Flap(layoutId = R.layout.flap_item_simple_text) +@Component(layoutId = R.layout.flap_item_simple_text) public class SimpleTextItem extends FlapItem { private static final String TAG = "SimpleTextItem"; diff --git a/app/src/main/java/me/yifeiyuan/flapdev/components/simpleimage/SimpleImageComponent.java b/app/src/main/java/me/yifeiyuan/flapdev/components/simpleimage/SimpleImageComponent.java index 9d4c34f0b..f1b6a7c82 100644 --- a/app/src/main/java/me/yifeiyuan/flapdev/components/simpleimage/SimpleImageComponent.java +++ b/app/src/main/java/me/yifeiyuan/flapdev/components/simpleimage/SimpleImageComponent.java @@ -21,5 +21,4 @@ public SimpleImageComponent(final View itemView) { protected void onBind(@NonNull final SimpleImageModel model) { } - } diff --git a/flap-annotations/build.gradle b/flap-annotations/build.gradle index cfa47b0e7..e5b039478 100644 --- a/flap-annotations/build.gradle +++ b/flap-annotations/build.gradle @@ -14,7 +14,7 @@ publish { userOrg = 'alancheen' groupId = 'me.yifeiyuan.flap' artifactId = 'flap-annotations' - publishVersion = '1.4.1' + publishVersion = '1.5.0' desc = 'flap annotations' website = 'https://github.com/AlanCheen/Flap' } \ No newline at end of file diff --git a/flap-compiler/build.gradle b/flap-compiler/build.gradle index ef68846d9..d9966e15c 100644 --- a/flap-compiler/build.gradle +++ b/flap-compiler/build.gradle @@ -16,7 +16,7 @@ publish { userOrg = 'alancheen' groupId = 'me.yifeiyuan.flap' artifactId = 'flap-compiler' - publishVersion = '1.4.1' + publishVersion = '1.5.0' desc = 'flap annotations' website = 'https://github.com/AlanCheen/Flap' } \ No newline at end of file diff --git a/flap-compiler/src/main/java/me/yifeiyuan/flap/compiler/FlapProcessor.java b/flap-compiler/src/main/java/me/yifeiyuan/flap/compiler/FlapProcessor.java index 9008e1d59..efeddacb7 100644 --- a/flap-compiler/src/main/java/me/yifeiyuan/flap/compiler/FlapProcessor.java +++ b/flap-compiler/src/main/java/me/yifeiyuan/flap/compiler/FlapProcessor.java @@ -110,7 +110,7 @@ private void processComponent(final RoundEnvironment roundEnvironment, final Typ /** * @param roundEnvironment 环境 - * @param typeElement @Flap + * @param typeElement @Component * @param flapItemElement 被 FlapItemFactory 注解了的那个类 * @param factory 注解了目标类的 注解,可以获取值 * @@ -239,7 +239,7 @@ public Set getSupportedAnnotationTypes() { return annotationTypes; } - public class FlapItemModelVisitor extends SimpleTypeVisitor8 { + private static class FlapItemModelVisitor extends SimpleTypeVisitor8 { @Override public DeclaredType visitDeclared(DeclaredType declaredType, Void o) { diff --git a/flap/build.gradle b/flap/build.gradle index f20db5061..78783e671 100644 --- a/flap/build.gradle +++ b/flap/build.gradle @@ -33,7 +33,7 @@ dependencies { apply plugin: "guru.stefma.bintrayrelease" -version = "1.4.1" +version = "1.5.0" group = "me.yifeiyuan.flap" androidArtifact { artifactId = "flap"