Skip to content

Commit

Permalink
修改文档
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanCheen committed Mar 25, 2020
1 parent 04a0b24 commit 9541fd2
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 40 deletions.
15 changes: 12 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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

对齐脑子里的组件化设计思想,改了一堆名字,要挨骂了~

Expand All @@ -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
Expand Down
53 changes: 23 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

Flap 重点类先知:

- `FlapItem`,它是 `Flap` 对原生 `ViewHolder` 的封装扩展,提供了更多优秀的功能以及便捷的方法,将你原来的 `ViewHolder` 继承它即可(可以理解为一个有更多功能的 `ViewHolder`);
- `FlapComponent`,它是 `Flap` 对原生 `ViewHolder` 的封装扩展,提供了更多优秀的功能以及便捷的方法,将你原来的 `ViewHolder` 继承它即可(可以理解为一个有更多功能的 `ViewHolder`);
- `FlapAdapter` 是对 `RecyclerView.Adapter` 的封装扩展,优化了大量逻辑,如解耦了 `ViewHolder` 创建以及绑定等相关逻辑,让 `Adapter` 更加易用;


Expand All @@ -29,23 +29,23 @@ 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()` 方法来处理你的数据绑定逻辑即可;



#### 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 的生命周期事件,**让你轻松面对类似 暂停/重播视频 这种依赖于生命周期的需求**;



Expand Down Expand Up @@ -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<SimpleTextModel> {
@Component(layoutId = R.layout.flap_item_simple_text)
public class SimpleTextItem extends FlapComponent<SimpleTextModel> {

private static final String TAG = "SimpleTextItem";

Expand Down Expand Up @@ -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)`

Expand All @@ -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的功能吗?

Expand Down
2 changes: 1 addition & 1 deletion README_EN.md
Original file line number Diff line number Diff line change
Expand Up @@ -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<SimpleTextModel> {

private static final String TAG = "SimpleTextItem";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,4 @@ public SimpleImageComponent(final View itemView) {
protected void onBind(@NonNull final SimpleImageModel model) {

}

}
2 changes: 1 addition & 1 deletion flap-annotations/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
2 changes: 1 addition & 1 deletion flap-compiler/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 注解了目标类的 注解,可以获取值
*
Expand Down Expand Up @@ -239,7 +239,7 @@ public Set<String> getSupportedAnnotationTypes() {
return annotationTypes;
}

public class FlapItemModelVisitor extends SimpleTypeVisitor8<DeclaredType, Void> {
private static class FlapItemModelVisitor extends SimpleTypeVisitor8<DeclaredType, Void> {

@Override
public DeclaredType visitDeclared(DeclaredType declaredType, Void o) {
Expand Down
2 changes: 1 addition & 1 deletion flap/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down

0 comments on commit 9541fd2

Please sign in to comment.