Skip to content

Commit 2edd16d

Browse files
author
junhua.lin
committed
refactor(*):修改版本号 发版
1 parent dd32ecc commit 2edd16d

8 files changed

Lines changed: 55 additions & 74 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ MultiTypeAdapter的优点如下:
1717
在build.gradle中添加如下代码:
1818
```groovy
1919
dependencies {
20-
compile 'cn.junhua.android.adapter:multitypeadapter:2.3.2'
20+
compile 'cn.junhua.android.adapter:multitypeadapter:2.3.3'
2121
}
2222
```
2323

app/src/main/java/cn/junhua/android/commonadapter/activity/One2ManyActivity.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package cn.junhua.android.commonadapter.activity;
22

33
import android.os.Bundle;
4+
import android.os.Handler;
45
import android.support.v7.app.AppCompatActivity;
56
import android.support.v7.widget.DividerItemDecoration;
67
import android.support.v7.widget.LinearLayoutManager;
78
import android.support.v7.widget.RecyclerView;
89

910
import cn.junhua.android.adapter.MultiTypeAdapter;
10-
import cn.junhua.android.adapter.ViewBinder;
11-
import cn.junhua.android.adapter.imp.TypeMatcher;
1211
import cn.junhua.android.commonadapter.R;
1312
import cn.junhua.android.commonadapter.bean.one2many.FriendBean;
1413
import cn.junhua.android.commonadapter.binder.one2many.FriendPhoto1ViewBinder;
@@ -40,19 +39,18 @@ protected void onCreate(Bundle savedInstanceState) {
4039
.mapping(new FriendPhoto1ViewBinder(),
4140
new FriendPhoto3ViewBinder(),
4241
new FriendPhoto4ViewBinder())
43-
.match(new TypeMatcher<FriendBean>() {
44-
@Override
45-
public Class<? extends ViewBinder<FriendBean>> onMatch(FriendBean bean, int position) {
46-
int size = bean.getPhotos().size();
47-
if (size == 0 || size == 1) return FriendPhoto1ViewBinder.class;
48-
if (size == 4) return FriendPhoto4ViewBinder.class;
49-
return FriendPhoto3ViewBinder.class;
50-
}
42+
.match((bean, position) -> {
43+
int size = bean.getPhotos().size();
44+
if (size == 0 || size == 1) return FriendPhoto1ViewBinder.class;
45+
if (size == 4) return FriendPhoto4ViewBinder.class;
46+
return FriendPhoto3ViewBinder.class;
5147
});
5248

5349
mMultiTypeAdapter.setList(FriendBean.getRandomFriend());
5450
recycler_view.setLayoutManager(new LinearLayoutManager(this));
5551
recycler_view.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
5652
recycler_view.setAdapter(mMultiTypeAdapter);
53+
54+
new Handler().postDelayed(() -> mMultiTypeAdapter.notifyDataSetChanged(), 3000);
5755
}
5856
}

app/src/main/java/cn/junhua/android/commonadapter/activity/TaobaoActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.junhua.android.commonadapter.activity;
22

33
import android.os.Bundle;
4+
import android.os.Handler;
45
import android.support.annotation.Nullable;
56
import android.support.v7.app.AppCompatActivity;
67
import android.support.v7.widget.GridLayoutManager;

config.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ rootProject.ext {
55
applicationId : "cn.junhua.android.commonadapter",
66
minSdkVersion : 14,
77
targetSdkVersion : 27,
8-
versionCode : 9,
9-
versionName : "2.3.2"
8+
versionCode : 10,
9+
versionName : "2.3.3"
1010
]
1111

1212
supportVersion = "27.0.2"

multitypeadapter/src/main/java/cn/junhua/android/adapter/MultiTypeAdapter.java

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class MultiTypeAdapter extends RecyclerView.Adapter<ViewHolder> {
2626
private Map<Class, ViewBinder> mViewBinderMap;
2727
// count view
2828
private int mViewSizeTemp;
29+
private ViewBinder mViewBinderTemp;
2930
// default ViewBinder
3031
private ViewBinder mDefaultViewBinder;
3132

@@ -80,17 +81,9 @@ public int getItemCount() {
8081
@Override
8182
public int getItemViewType(int position) {
8283
Object bean = mList.get(position);
83-
Class beanClass = bean.getClass();
84-
ViewBinder viewBinder;
85-
if (mViewBinderMap.containsKey(beanClass)) {
86-
viewBinder = mViewBinderMap.get(beanClass);
87-
} else if (mDefaultViewBinder != null) {
88-
viewBinder = mDefaultViewBinder;
89-
} else {
90-
throw new ViewBinderNotFoundException(beanClass);
91-
}
92-
mViewSizeTemp = viewBinder.onCountView(bean, position);
93-
return viewBinder.onCreateItemView(bean, position);
84+
mViewBinderTemp = getCurrentViewBinder(position);
85+
mViewSizeTemp = mViewBinderTemp.onCountView(bean, position);
86+
return mViewBinderTemp.onCreateItemView(bean, position);
9487
}
9588

9689
@Override
@@ -100,14 +93,19 @@ public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
10093
}
10194
return new ViewHolder(
10295
mLayoutInflater.inflate(viewType, parent, false),
103-
parent, mViewSizeTemp);
96+
parent, mViewBinderTemp, mViewSizeTemp);
10497
}
10598

106-
@SuppressWarnings("unchecked")
10799
@Override
108100
public void onBindViewHolder(ViewHolder holder, int position) {
101+
onBindViewHolder(holder, position, Collections.emptyList());
102+
}
103+
104+
@SuppressWarnings("unchecked")
105+
@Override
106+
public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) {
109107
Object bean = mList.get(position);
110-
getCurrentViewBinder(position).onBindView(holder, bean, position);
108+
holder.getViewBinder().onBindView(holder, bean, position, payloads);
111109
}
112110

113111
@Override
@@ -117,28 +115,39 @@ public long getItemId(int position) {
117115

118116
@Override
119117
public void onViewRecycled(ViewHolder holder) {
120-
getCurrentViewBinder(holder.getAdapterPosition()).onViewRecycled(holder);
118+
holder.getViewBinder().onViewRecycled(holder);
121119
}
122120

123121
@Override
124122
public boolean onFailedToRecycleView(ViewHolder holder) {
125-
return getCurrentViewBinder(holder.getAdapterPosition()).onFailedToRecycleView(holder);
123+
return holder.getViewBinder().onFailedToRecycleView(holder);
126124
}
127125

128126
@Override
129127
public void onViewAttachedToWindow(ViewHolder holder) {
130-
getCurrentViewBinder(holder.getAdapterPosition()).onViewAttachedToWindow(holder);
128+
holder.getViewBinder().onViewAttachedToWindow(holder);
131129
}
132130

133131
@Override
134132
public void onViewDetachedFromWindow(ViewHolder holder) {
135-
getCurrentViewBinder(holder.getAdapterPosition()).onViewDetachedFromWindow(holder);
133+
holder.getViewBinder().onViewDetachedFromWindow(holder);
136134
}
137135

136+
@SuppressWarnings("unchecked")
138137
private ViewBinder getCurrentViewBinder(int position) {
139-
ViewBinder viewBinder = mViewBinderMap.get(mList.get(position).getClass());
140-
if (viewBinder == null) {
138+
Object bean = mList.get(position);
139+
Class beanClass = bean.getClass();
140+
ViewBinder viewBinder;
141+
if (mViewBinderMap.containsKey(beanClass)) {
142+
viewBinder = mViewBinderMap.get(beanClass);
143+
if (viewBinder instanceof MultiViewBinder) {
144+
MultiViewBinder multiViewBinder = (MultiViewBinder) viewBinder;
145+
viewBinder = multiViewBinder.getViewBinder(bean, position);
146+
}
147+
} else if (mDefaultViewBinder != null) {
141148
viewBinder = mDefaultViewBinder;
149+
} else {
150+
throw new ViewBinderNotFoundException(beanClass);
142151
}
143152
return viewBinder;
144153
}

multitypeadapter/src/main/java/cn/junhua/android/adapter/MultiViewBinder.java

Lines changed: 2 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -33,60 +33,22 @@ void setAdapter(MultiTypeAdapter adapter) {
3333
}
3434
}
3535

36-
@Override
37-
public int onCountView(T bean, int position) {
38-
return getViewBinder(bean, position).onCountView(bean, position);
39-
}
40-
4136
@Override
4237
public int onCreateItemView(T bean, int position) {
43-
return getViewBinder(bean, position).onCreateItemView(bean, position);
38+
return 0;
4439
}
4540

4641
@Override
4742
public void onBindView(ViewHolder holder, T bean, int position) {
48-
getViewBinder(bean, position).onBindView(holder, bean, position);
49-
}
50-
51-
@SuppressWarnings("unchecked")
52-
@Override
53-
protected long getItemId(int position) {
54-
T bean = (T) getAdapter().getList().get(position);
55-
return getViewBinder(bean, position).getItemId(position);
56-
}
5743

58-
@Override
59-
protected void onViewRecycled(ViewHolder holder) {
60-
getViewBinder(holder).onViewRecycled(holder);
6144
}
6245

63-
@Override
64-
protected boolean onFailedToRecycleView(ViewHolder holder) {
65-
return getViewBinder(holder).onFailedToRecycleView(holder);
66-
}
67-
68-
@Override
69-
protected void onViewAttachedToWindow(ViewHolder holder) {
70-
getViewBinder(holder).onViewAttachedToWindow(holder);
71-
}
72-
73-
74-
@Override
75-
protected void onViewDetachedFromWindow(ViewHolder holder) {
76-
getViewBinder(holder).onViewDetachedFromWindow(holder);
77-
}
78-
79-
private ViewBinder<T> getViewBinder(T bean, int position) {
46+
ViewBinder getViewBinder(T bean, int position) {
8047
Class<? extends ViewBinder<T>> viewBinderClass = mTypeMatcher.onMatch(bean, position);
8148
if (!mViewBinderManager.containsKey(viewBinderClass)) {
8249
throw new ViewBinderNotFoundException(bean.getClass(), viewBinderClass);
8350
}
8451
return mViewBinderManager.get(viewBinderClass);
8552
}
8653

87-
@SuppressWarnings("unchecked")
88-
private ViewBinder<T> getViewBinder(ViewHolder holder) {
89-
int pos = holder.getAdapterPosition();
90-
return getViewBinder((T) getAdapter().getList().get(pos), pos);
91-
}
9254
}

multitypeadapter/src/main/java/cn/junhua/android/adapter/ViewBinder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.support.annotation.LayoutRes;
44
import android.support.v7.widget.RecyclerView;
55

6+
import java.util.List;
7+
68
/**
79
* the base class for binding view.
810
* Created by junhua.lin on 2017/12/27.
@@ -42,6 +44,10 @@ public int onCountView(T bean, int position) {
4244
public abstract @LayoutRes
4345
int onCreateItemView(T bean, int position);
4446

47+
public void onBindView(ViewHolder holder, T bean, int position, List<Object> payloads) {
48+
onBindView(holder, bean, position);
49+
}
50+
4551
public abstract void onBindView(ViewHolder holder, T bean, int position);
4652

4753
protected long getItemId(int position) {

multitypeadapter/src/main/java/cn/junhua/android/adapter/ViewHolder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@ public class ViewHolder extends RecyclerView.ViewHolder {
1818
private SparseArray<View> mViews;
1919
private View mConvertView;
2020
private RecyclerView mRecyclerView;
21+
private ViewBinder mViewBinder;
2122

22-
public ViewHolder(View root, ViewGroup parent, int initialCapacity) {
23+
public ViewHolder(View root, ViewGroup parent, ViewBinder viewBinder, int initialCapacity) {
2324
super(root);
2425
this.mViews = new SparseArray<>(initialCapacity >= 0 ? initialCapacity : 6);
2526
this.mConvertView = root;
27+
this.mViewBinder = viewBinder;
2628
this.mRecyclerView = (RecyclerView) parent;
2729
}
2830

@@ -62,4 +64,7 @@ public ViewHolder setBackgroundResource(@IdRes int viewId, @DrawableRes int draw
6264
return this;
6365
}
6466

67+
public ViewBinder getViewBinder() {
68+
return mViewBinder;
69+
}
6570
}

0 commit comments

Comments
 (0)