Skip to content

Commit 599df51

Browse files
authored
Merge pull request #7 from AlanCheen/develop
Develop 0.4.0 feature
2 parents 2e07187 + fcef652 commit 599df51

File tree

12 files changed

+100
-68
lines changed

12 files changed

+100
-68
lines changed

README.md

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,11 @@
22

33
[ ![Download](https://api.bintray.com/packages/alancheen/maven/flap/images/download.svg?version=0.3.0) ](https://bintray.com/alancheen/maven/flap/0.3.0/link) [![Build Status](https://travis-ci.org/AlanCheen/Flap.svg?branch=master)](https://travis-ci.org/AlanCheen/Flap)
44

5-
Flap is an Android library that make RecyclerView.Adapter more easier to use.
65

7-
Especially when you have to support lots of different type ViewHolders.
86

9-
Flap will make you enjoy developing ViewHolders.
7+
Flap is an library that makes RecyclerView.Adapter more easier to use , especially when you have to support lots of different type ViewHolders.
108

11-
And you will save a lot of time by avoiding writing lots of boilerplate code with Flap.
12-
13-
Btw , Flap integrated with Lifecycle , you can get the lifecycle callback easily which is very helpful.
9+
Flap can save your day by keeping you from writing boilerplate codes.
1410

1511
Have a try , thanks !
1612

@@ -43,20 +39,20 @@ public class SimpleTextModel {
4339
}
4440
```
4541

46-
#### Step 2 : Create a `FlapViewHolder` and `LayoutTypeItemFactory` :
42+
#### Step 2 : Create a `FlapItem` and `FlapItemFactory` :
4743

48-
`FlapViewHolder` is the base ViewHolder class that Flap is using which provides useful methods.
44+
`FlapItem` is a base `ViewHolder` that Flap is using which provides useful methods.
4945

50-
`LayoutTypeItemFactory` is a `ItemFactory` that tells Flap how to create a `FlapViewHolder`.
46+
`FlapItemFactory` tells Flap the layout res id which is used when creating a `FlapItem`.
5147

5248
Here is a sample :
5349

5450
```java
55-
public class SimpleTextItemViewHolder extends FlapViewHolder<SimpleTextModel> {
51+
public class SimpleTextItem extends FlapItem<SimpleTextModel> {
5652

5753
private TextView tvContent;
5854

59-
public SimpleTextItemViewHolder(final View itemView) {
55+
public SimpleTextItem(final View itemView) {
6056
super(itemView);
6157
tvContent = findViewById(R.id.tv_content);
6258
}
@@ -66,17 +62,19 @@ public class SimpleTextItemViewHolder extends FlapViewHolder<SimpleTextModel> {
6662
tvContent.setText(model.content);
6763
}
6864

69-
public static class SimpleTextItemFactory extends LayoutTypeItemFactory<SimpleTextModel, SimpleTextItemViewHolder> {
65+
public static class SimpleTextItemFactory extends FlapItemFactory<SimpleTextModel, SimpleTextItem> {
66+
7067
@Override
7168
protected int getLayoutResId(final SimpleTextModel model) {
7269
return R.layout.flap_item_simple_text;
7370
}
71+
7472
}
7573

7674
}
7775
```
7876

79-
#### Step 3 : Create a `FlapAdapter` and register the `LayoutTypeItemFactory`
77+
#### Step 3 : Create a `FlapAdapter` and register the `FlapItemFactory`
8078

8179
Create your `FlapAdapter` and register the `SimpleTextItemFactory` that we already created , setup the models :
8280

@@ -103,16 +101,30 @@ You are good to go!
103101

104102
## More Feature
105103

106-
Flap adds some features for `FlapViewHolder` :
104+
Flap adds some features for `FlapItem` :
107105

108106
1. Access a context directly by field `context`
109107
2. Call `findViewById()` instead of `itemView.findViewById`
110108

111109
What's more , here are some methods for you that you can override if you need :
112110

113111
1. Override `onBind(final T model, final FlapAdapter adapter, final List<Object> payloads)` when you wanna access your adapter or payloads.
114-
2. Override `onViewAttachedToWindow` & `onViewDetachedFromWindow` so that you can do something like pause or resume a video.
115-
3. Override lifecycle callbacks : `onResume``onPause``onStop``onDestroy` when you care about the lifecycle , FlapAdapter binds the LifecycleOwner automatically.
112+
2. Override `onViewAttachedToWindow` & `onViewDetachedFromWindow` so that you can do something like pausing or resuming a video.
113+
114+
115+
116+
### Enable Lifecycle
117+
118+
By extending `LifecycleItem` , a lifecycle aware `ViewHolder` , you can get the lifecycle callbacks : `onResume``onPause``onStop``onDestroy` when you care about the lifecycle , `FlapAdapter` binds the `LifecycleOwner` automatically.
119+
120+
121+
Releated methods :
122+
123+
1. `FlapAdapter.setLifecycleEnable(boolean lifecycleEnable) ` enabled by default
124+
125+
2. `FlapAdapter.setLifecycleOwner(@NonNull final LifecycleOwner lifecycleOwner)`
126+
127+
116128

117129
## Change Log
118130

app/src/main/java/me/yifeiyuan/flapdev/MainActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import me.yifeiyuan.flap.FlapAdapter;
1111
import me.yifeiyuan.flapdev.simpleimage.SimpleImageModel;
1212
import me.yifeiyuan.flapdev.simpleimage.SimpleImageVH;
13-
import me.yifeiyuan.flapdev.simpletext.SimpleTextItemViewHolder;
13+
import me.yifeiyuan.flapdev.simpletext.SimpleTextItem;
1414
import me.yifeiyuan.flapdev.simpletext.SimpleTextModel;
1515

1616
public class MainActivity extends AppCompatActivity {
@@ -24,7 +24,7 @@ protected void onCreate(Bundle savedInstanceState) {
2424

2525
FlapAdapter adapter = new FlapAdapter();
2626

27-
adapter.registerItemFactory(new SimpleTextItemViewHolder.SimpleTextItemFactory())
27+
adapter.registerItemFactory(new SimpleTextItem.SimpleTextItemFactory())
2828
.registerItemFactory(new SimpleImageVH.SimpleImageItemFactory());
2929

3030
List<Object> models = new ArrayList<>();

app/src/main/java/me/yifeiyuan/flapdev/simpleimage/SimpleImageVH.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
import android.view.View;
66
import android.view.ViewGroup;
77

8-
import me.yifeiyuan.flap.FlapViewHolder;
8+
import me.yifeiyuan.flap.FlapItem;
99
import me.yifeiyuan.flap.ItemFactory;
1010
import me.yifeiyuan.flapdev.R;
1111

1212
/**
1313
* Created by 程序亦非猿 on 2018/12/4.
1414
*/
15-
public class SimpleImageVH extends FlapViewHolder<SimpleImageModel> {
15+
public class SimpleImageVH extends FlapItem<SimpleImageModel> {
1616

1717
public SimpleImageVH(final View itemView) {
1818
super(itemView);
@@ -27,7 +27,7 @@ public static class SimpleImageItemFactory implements ItemFactory<SimpleImageMod
2727

2828
@NonNull
2929
@Override
30-
public FlapViewHolder onCreateViewHolder(@NonNull final LayoutInflater inflater, @NonNull final ViewGroup parent, final int viewType) {
30+
public FlapItem onCreateViewHolder(@NonNull final LayoutInflater inflater, @NonNull final ViewGroup parent, final int viewType) {
3131
return new SimpleImageVH(inflater.inflate(viewType, parent, false));
3232
}
3333

app/src/main/java/me/yifeiyuan/flapdev/simpletext/SimpleTextItemViewHolder.java renamed to app/src/main/java/me/yifeiyuan/flapdev/simpletext/SimpleTextItem.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
import android.view.View;
44
import android.widget.TextView;
55

6-
import me.yifeiyuan.flap.FlapViewHolder;
7-
import me.yifeiyuan.flap.LayoutTypeItemFactory;
6+
import me.yifeiyuan.flap.FlapItem;
7+
import me.yifeiyuan.flap.FlapItemFactory;
88
import me.yifeiyuan.flapdev.R;
99

1010
/**
1111
* Created by 程序亦非猿 on 2018/12/4.
1212
*/
13-
public class SimpleTextItemViewHolder extends FlapViewHolder<SimpleTextModel> {
13+
public class SimpleTextItem extends FlapItem<SimpleTextModel> {
1414

1515
private TextView tvContent;
1616

17-
public SimpleTextItemViewHolder(final View itemView) {
17+
public SimpleTextItem(final View itemView) {
1818
super(itemView);
1919
tvContent = findViewById(R.id.tv_content);
2020
}
@@ -24,7 +24,7 @@ protected void onBind(final SimpleTextModel model) {
2424
tvContent.setText(model.content);
2525
}
2626

27-
public static class SimpleTextItemFactory extends LayoutTypeItemFactory<SimpleTextModel, SimpleTextItemViewHolder> {
27+
public static class SimpleTextItemFactory extends FlapItemFactory<SimpleTextModel, SimpleTextItem> {
2828

2929
@Override
3030
protected int getLayoutResId(final SimpleTextModel model) {

flap/src/main/java/me/yifeiyuan/flap/DefaultViewHolder.java renamed to flap/src/main/java/me/yifeiyuan/flap/DefaultFlapItem.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
*
88
* It's the default ViewHolder would be used when something wrong was happened so that we won't get a crash.
99
*/
10-
class DefaultViewHolder extends FlapViewHolder {
10+
class DefaultFlapItem extends FlapItem {
1111

12-
DefaultViewHolder(final View itemView) {
12+
DefaultFlapItem(final View itemView) {
1313
super(itemView);
1414
}
1515

flap/src/main/java/me/yifeiyuan/flap/Flap.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,9 @@ public int getItemViewType(@NonNull final Object model) {
8282

8383
@NonNull
8484
@Override
85-
public FlapViewHolder onCreateViewHolder(@NonNull final LayoutInflater inflater, @NonNull final ViewGroup parent, final int viewType) {
85+
public FlapItem onCreateViewHolder(@NonNull final LayoutInflater inflater, @NonNull final ViewGroup parent, final int viewType) {
8686

87-
FlapViewHolder vh = null;
87+
FlapItem vh = null;
8888

8989
ItemFactory factory = factoryMapping.get(viewType);
9090
if (null != factory) {
@@ -104,7 +104,7 @@ public FlapViewHolder onCreateViewHolder(@NonNull final LayoutInflater inflater,
104104

105105
@NonNull
106106
@Override
107-
public FlapViewHolder onCreateDefaultViewHolder(@NonNull final LayoutInflater inflater, @NonNull final ViewGroup parent, final int viewType) {
108-
return new DefaultViewHolder(new View(parent.getContext()));
107+
public FlapItem onCreateDefaultViewHolder(@NonNull final LayoutInflater inflater, @NonNull final ViewGroup parent, final int viewType) {
108+
return new DefaultFlapItem(new View(parent.getContext()));
109109
}
110110
}

flap/src/main/java/me/yifeiyuan/flap/FlapAdapter.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package me.yifeiyuan.flap;
22

3+
import android.arch.lifecycle.LifecycleObserver;
34
import android.arch.lifecycle.LifecycleOwner;
45
import android.support.annotation.NonNull;
56
import android.support.v7.widget.RecyclerView;
@@ -14,7 +15,7 @@
1415
/**
1516
* Created by 程序亦非猿
1617
*/
17-
public class FlapAdapter extends RecyclerView.Adapter<FlapViewHolder> implements ItemFactoryManager {
18+
public class FlapAdapter extends RecyclerView.Adapter<FlapItem> implements ItemFactoryManager {
1819

1920
@NonNull
2021
private Flap flap = Flap.getDefault();
@@ -28,24 +29,28 @@ public class FlapAdapter extends RecyclerView.Adapter<FlapViewHolder> implements
2829

2930
@NonNull
3031
@Override
31-
public FlapViewHolder onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
32+
public FlapItem onCreateViewHolder(@NonNull final ViewGroup parent, final int viewType) {
3233
return flap.onCreateViewHolder(LayoutInflater.from(parent.getContext()), parent, viewType);
3334
}
3435

3536
@Override
36-
public final void onBindViewHolder(@NonNull final FlapViewHolder holder, final int position) {
37+
public final void onBindViewHolder(@NonNull final FlapItem holder, final int position) {
3738
//ignore
3839
}
3940

4041
@SuppressWarnings("unchecked")
4142
@Override
42-
public void onBindViewHolder(@NonNull final FlapViewHolder holder, final int position, @NonNull final List<Object> payloads) {
43-
if (lifecycleEnable && null != lifecycleOwner) {
44-
lifecycleOwner.getLifecycle().addObserver(holder);
45-
}
43+
public void onBindViewHolder(@NonNull final FlapItem holder, final int position, @NonNull final List<Object> payloads) {
44+
attachLifecycleOwnerIfNeed(holder);
4645
holder.bind(getModel(position), this, payloads);
4746
}
4847

48+
private void attachLifecycleOwnerIfNeed(final FlapItem holder) {
49+
if (lifecycleEnable && lifecycleOwner != null && holder instanceof LifecycleObserver) {
50+
lifecycleOwner.getLifecycle().addObserver((LifecycleObserver) holder);
51+
}
52+
}
53+
4954
@Override
5055
public int getItemCount() {
5156
return getModels().size();
@@ -77,13 +82,13 @@ public void onAttachedToRecyclerView(@NonNull final RecyclerView recyclerView) {
7782
}
7883

7984
@Override
80-
public void onViewAttachedToWindow(@NonNull FlapViewHolder holder) {
85+
public void onViewAttachedToWindow(@NonNull FlapItem holder) {
8186
super.onViewAttachedToWindow(holder);
8287
holder.onViewAttachedToWindow();
8388
}
8489

8590
@Override
86-
public void onViewDetachedFromWindow(@NonNull FlapViewHolder holder) {
91+
public void onViewDetachedFromWindow(@NonNull FlapItem holder) {
8792
super.onViewDetachedFromWindow(holder);
8893
holder.onViewDetachedFromWindow();
8994
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package me.yifeiyuan.flap;
22

3-
import android.arch.lifecycle.Lifecycle;
4-
import android.arch.lifecycle.LifecycleObserver;
5-
import android.arch.lifecycle.OnLifecycleEvent;
63
import android.content.Context;
74
import android.support.annotation.IdRes;
85
import android.support.v7.widget.RecyclerView;
@@ -15,11 +12,11 @@
1512
*
1613
* The base ViewHolder provides some useful convenient abilities.
1714
*/
18-
public abstract class FlapViewHolder<T> extends RecyclerView.ViewHolder implements LifecycleObserver {
15+
public abstract class FlapItem<T> extends RecyclerView.ViewHolder {
1916

2017
protected final Context context;
2118

22-
public FlapViewHolder(View itemView) {
19+
public FlapItem(View itemView) {
2320
super(itemView);
2421
context = itemView.getContext();
2522
}
@@ -39,31 +36,15 @@ protected final <V extends View> V findViewById(@IdRes int viewId) {
3936
}
4037

4138
/**
42-
* @see FlapAdapter#onViewAttachedToWindow(FlapViewHolder)
39+
* @see FlapAdapter#onViewAttachedToWindow(FlapItem)
4340
*/
4441
void onViewAttachedToWindow() {
4542
}
4643

4744
/**
48-
* @see FlapAdapter#onViewDetachedFromWindow(FlapViewHolder)
45+
* @see FlapAdapter#onViewDetachedFromWindow(FlapItem)
4946
*/
5047
void onViewDetachedFromWindow() {
5148
}
5249

53-
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
54-
public void onResume() {
55-
}
56-
57-
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
58-
public void onPause() {
59-
}
60-
61-
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
62-
public void onStop() {
63-
}
64-
65-
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
66-
public void onDestroy() {
67-
}
68-
6950
}

flap/src/main/java/me/yifeiyuan/flap/LayoutTypeItemFactory.java renamed to flap/src/main/java/me/yifeiyuan/flap/FlapItemFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
/**
1313
* Created by 程序亦非猿
1414
*/
15-
public abstract class LayoutTypeItemFactory<T, VH extends FlapViewHolder> implements ItemFactory<T> {
15+
public abstract class FlapItemFactory<T, VH extends FlapItem> implements ItemFactory<T> {
1616

1717
@SuppressWarnings("unchecked")
1818
@NonNull

flap/src/main/java/me/yifeiyuan/flap/IFlap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ public interface IFlap extends ItemFactoryManager {
1212
int getItemViewType(@NonNull Object model);
1313

1414
@NonNull
15-
FlapViewHolder onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent, int viewType);
15+
FlapItem onCreateViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent, int viewType);
1616

1717
@NonNull
18-
FlapViewHolder onCreateDefaultViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent, int viewType);
18+
FlapItem onCreateDefaultViewHolder(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent, int viewType);
1919
}

0 commit comments

Comments
 (0)