-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path(backup)HeaderAndFooterWrapper.java
113 lines (87 loc) · 3.22 KB
/
(backup)HeaderAndFooterWrapper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.crabsama.mywechat;
import android.content.Context;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
public class HeaderAndFooterWrapper<T> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int BASE_ITEM_TYPE_HEADER = 100000;
private static final int BASE_ITEM_TYPE_FOOTER = 200000;
private SparseArray<View> mHeaderViews = new SparseArray<>();
private SparseArray<View> mFooterViews = new SparseArray<>();
private RecyclerView.Adapter mInnerAdapter;
public HeaderAndFooterWrapper(RecyclerView.Adapter adapter) {
mInnerAdapter = adapter;
}
public int getHeadersCount(){
return mHeaderViews.size();
}
public int getFootersCount(){
return mFooterViews.size();
}
public void addHeaderView(View view){
mHeaderViews.put(mHeaderViews.size() + BASE_ITEM_TYPE_HEADER,view);
}
public void addFooterView(View view){
mFooterViews.put(mFooterViews.size() + BASE_ITEM_TYPE_FOOTER,view);
}
public boolean isHeaderView(int position){
return position<getHeadersCount();
}
public boolean isFooterView(int position){
return position>= getHeadersCount() + getRealItemCount();
}
private int getRealItemCount(){
return mInnerAdapter.getItemCount();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(mHeaderViews.get(viewType) != null){
ViewHolder holder = ViewHolder.createViewHolder(parent.getContext(),mHeaderViews.get(viewType));
return holder;
}else if (mFooterViews.get(viewType) != null){
ViewHolder holder = ViewHolder.createViewHolder(parent.getContext(),mFooterViews.get(viewType));
return holder;
}
return mInnerAdapter.onCreateViewHolder(parent,viewType);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(isHeaderView(position)){
return;
}
if(isFooterView(position)){
return;
}
mInnerAdapter.onBindViewHolder(holder,position - getHeadersCount());
}
@Override
public int getItemViewType(int position) {
if(isHeaderView(position)){
return mHeaderViews.keyAt(position);
}else if(isFooterView(position)){
return mFooterViews.keyAt(position - getHeadersCount() - getRealItemCount());
}
return mInnerAdapter.getItemViewType(position - getHeadersCount());
}
@Override
public int getItemCount() {
return getHeadersCount() + getFootersCount() + getRealItemCount();
}
}
class ViewHolder extends RecyclerView.ViewHolder{
private SparseArray<View> mViews;
private View mView;
private Context mContext;
public ViewHolder(Context context,View itemView) {
super(itemView);
mContext = context;
mView = itemView;
mViews = new SparseArray<View>();
}
public static ViewHolder createViewHolder(Context context, View itemView)
{
ViewHolder holder = new ViewHolder(context, itemView);
return holder;
}
}