4 | * Copyright (c), 2009 深圳孔方兄金融信息服务有限公司(Shenzhen kfxiong 5 | * Financial Information Service Co. Ltd.) 6 | *
7 | * 著作权人保留一切权利,任何使用需经授权。
8 | */
9 | package space.sye.z.library.manager;
10 |
11 | import android.content.Context;
12 | import android.support.v7.widget.GridLayoutManager;
13 | import android.support.v7.widget.RecyclerView;
14 | import android.view.View;
15 |
16 | import space.sye.z.library.adapter.RefreshRecyclerViewAdapter;
17 | import space.sye.z.library.listener.LoadMoreRecyclerListener;
18 | import space.sye.z.library.listener.OnLoadMoreListener;
19 | import space.sye.z.library.listener.OnPullDownListener;
20 | import space.sye.z.library.listener.OnBothRefreshListener;
21 | import space.sye.z.library.RefreshRecyclerView;
22 |
23 | /**
24 | * The Management Class for RefreshRecyclerViewAdapter
25 | * Created by Syehunter on 2015/11/19.
26 | */
27 | public class RefreshRecyclerAdapterManager {
28 |
29 | private RefreshRecyclerView recyclerView;
30 | private RefreshRecyclerViewAdapter mAdapter;
31 | private RecyclerView.LayoutManager mLayoutManager;
32 | private RecyclerMode mode;
33 |
34 | private OnBothRefreshListener mOnBothRefreshListener;
35 | private OnPullDownListener mOnPullDownListener;
36 | private OnLoadMoreListener mOnLoadMoreListener;
37 | private RefreshRecyclerViewAdapter.OnItemClickListener mOnItemClickListener;
38 | private RefreshRecyclerViewAdapter.OnItemLongClickListener mOnItemLongClickListener;
39 | private RecyclerView.ItemDecoration mDecor;
40 | private LoadMoreRecyclerListener loadMoreRecyclerListener;
41 | private RecyclerView.ItemAnimator mItemAnimator;
42 |
43 | public RefreshRecyclerAdapterManager(
44 | RecyclerView.Adapter adapter, RecyclerView.LayoutManager layoutManager) {
45 | this.mAdapter = new RefreshRecyclerViewAdapter(adapter);
46 |
47 | if (null == layoutManager){
48 | throw new NullPointerException("Couldn't resolve a null object reference of LayoutManager");
49 | }
50 | this.mLayoutManager = layoutManager;
51 | if (layoutManager instanceof GridLayoutManager){
52 | //如果是header或footer,设置其充满整列
53 | ((GridLayoutManager)layoutManager).setSpanSizeLookup(
54 | new HeaderSapnSizeLookUp(mAdapter, ((GridLayoutManager) layoutManager).getSpanCount()));
55 | }
56 | this.mLayoutManager = layoutManager;
57 | }
58 |
59 | private RefreshRecyclerAdapterManager getInstance(){
60 | return RefreshRecyclerAdapterManager.this;
61 | }
62 |
63 | public RefreshRecyclerAdapterManager addHeaderView(View v){
64 | mAdapter.addHeaderView(v);
65 | return getInstance();
66 | }
67 |
68 | public RefreshRecyclerAdapterManager addHeaderView(View v, int position){
69 | mAdapter.addHeaderView(v, position);
70 | return getInstance();
71 | }
72 |
73 | public RefreshRecyclerAdapterManager addFooterView(View v){
74 | mAdapter.addFooterView(v);
75 | return getInstance();
76 | }
77 |
78 | public RefreshRecyclerAdapterManager removeHeaderView(View v){
79 | mAdapter.removeHeader(v);
80 | return getInstance();
81 | }
82 |
83 | public RefreshRecyclerViewAdapter getAdapter(){
84 | return mAdapter;
85 | }
86 |
87 | public RefreshRecyclerAdapterManager setOnBothRefreshListener(OnBothRefreshListener onBothRefreshListener){
88 | this.mOnBothRefreshListener = onBothRefreshListener;
89 | return getInstance();
90 | }
91 |
92 | public RefreshRecyclerAdapterManager setOnPullDownListener(OnPullDownListener onPullDownListener){
93 | this.mOnPullDownListener = onPullDownListener;
94 | return getInstance();
95 | }
96 |
97 | public RefreshRecyclerAdapterManager setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener){
98 | this.mOnLoadMoreListener = onLoadMoreListener;
99 | return getInstance();
100 | }
101 |
102 | public RefreshRecyclerAdapterManager removeFooterView(View v){
103 | mAdapter.removeFooter(v);
104 | return getInstance();
105 | }
106 |
107 | public RefreshRecyclerAdapterManager setMode(RecyclerMode mode){
108 | this.mode = mode;
109 | return getInstance();
110 | }
111 |
112 | // public RefreshRecyclerAdapterManager setLayoutManager(RecyclerView.LayoutManager layoutManager){
113 | // if (null == layoutManager){
114 | // throw new NullPointerException("Couldn't resolve a null object reference of LayoutManager");
115 | // }
116 | // this.mLayoutManager = layoutManager;
117 | // if (layoutManager instanceof GridLayoutManager){
118 | // //如果是header或footer,设置其充满整列
119 | // ((GridLayoutManager)layoutManager).setSpanSizeLookup(
120 | // new HeaderSapnSizeLookUp(mAdapter, ((GridLayoutManager) layoutManager).getSpanCount()));
121 | // }
122 | // return getInstance();
123 | // }
124 |
125 | public RefreshRecyclerAdapterManager setOnItemClickListener
126 | (RefreshRecyclerViewAdapter.OnItemClickListener onItemClickListener){
127 | this.mOnItemClickListener = onItemClickListener;
128 | return getInstance();
129 | }
130 |
131 | public RefreshRecyclerAdapterManager setOnItemLongClickListener(
132 | RefreshRecyclerViewAdapter.OnItemLongClickListener onItemLongClickListener){
133 | this.mOnItemLongClickListener = onItemLongClickListener;
134 | return getInstance();
135 | }
136 |
137 | public void onRefreshCompleted(){
138 | if (null == recyclerView){
139 | throw new NullPointerException("recyclerView is null");
140 | }
141 | if (null == mAdapter){
142 | throw new NullPointerException("adapter is null");
143 | }
144 | if (RecyclerMode.BOTH == mode || RecyclerMode.TOP == mode){
145 | recyclerView.refreshComplete();
146 | }
147 | if (RecyclerMode.BOTH == mode || RecyclerMode.BOTTOM == mode){
148 | if(null != loadMoreRecyclerListener){
149 | loadMoreRecyclerListener.onRefreshComplete();
150 | }
151 | }
152 |
153 | }
154 |
155 | public RefreshRecyclerView getRecyclerView(){
156 | if (null == recyclerView){
157 | throw new NullPointerException("Couldn't resolve a null object reference of RefreshRecyclerView");
158 | }
159 | return recyclerView;
160 | }
161 |
162 | public RefreshRecyclerAdapterManager setItemAnimator(RecyclerView.ItemAnimator itemAnimator){
163 | this.mItemAnimator = itemAnimator;
164 | return getInstance();
165 | }
166 |
167 | public RefreshRecyclerAdapterManager addItemDecoration(RecyclerView.ItemDecoration decor){
168 | this.mDecor = decor;
169 | return getInstance();
170 | }
171 |
172 | public void into(RefreshRecyclerView recyclerView, Context context){
173 | if (null == recyclerView){
174 | throw new NullPointerException("Couldn't resolve a null object reference of RefreshRecyclerView");
175 | }
176 |
177 | mAdapter.putLayoutManager(mLayoutManager);
178 | recyclerView.setAdapter(mAdapter);
179 |
180 | recyclerView.setMode(mode);
181 | //为RefreshRecyclerView添加滚动监听
182 | loadMoreRecyclerListener = new LoadMoreRecyclerListener(context, mode);
183 | recyclerView.addOnScrollListener(loadMoreRecyclerListener);
184 | recyclerView.addItemDecoration(mDecor);
185 | if (RecyclerMode.BOTH == mode){
186 | if (null != mOnBothRefreshListener){
187 | recyclerView.setOnBothRefreshListener(mOnBothRefreshListener);
188 | }
189 | } else if (RecyclerMode.TOP == mode){
190 | if(null != mOnPullDownListener){
191 | recyclerView.setOnPullDownListener(mOnPullDownListener);
192 | }
193 | } else if (RecyclerMode.BOTTOM == mode){
194 | if (null != mOnLoadMoreListener){
195 | recyclerView.setOnLoadMoreListener(mOnLoadMoreListener);
196 | }
197 | }
198 |
199 | recyclerView.addItemDecoration(mDecor);
200 | recyclerView.setItemAnimator(mItemAnimator);
201 |
202 | mAdapter.setOnItemClickListener(mOnItemClickListener);
203 | mAdapter.setOnItemLongClickListener(mOnItemLongClickListener);
204 | recyclerView.setLayoutManager(mLayoutManager);
205 | this.recyclerView = recyclerView;
206 | }
207 |
208 | }
209 |
--------------------------------------------------------------------------------
/library/library.iml:
--------------------------------------------------------------------------------
1 |
2 |
4 | * Copyright (c), 2009 深圳孔方兄金融信息服务有限公司(Shenzhen kfxiong 5 | * Financial Information Service Co. Ltd.) 6 | *
7 | * 著作权人保留一切权利,任何使用需经授权。
8 | */
9 | package space.sye.z.library.adapter;
10 |
11 | import android.support.v7.widget.RecyclerView;
12 | import android.support.v7.widget.StaggeredGridLayoutManager;
13 | import android.view.View;
14 | import android.view.ViewGroup;
15 | import android.widget.AdapterView;
16 |
17 | import java.util.ArrayList;
18 |
19 | import space.sye.z.library.holder.RecyclerHeaderViewHolder;
20 |
21 | /**
22 | * Created by Syehunter on 2015/11/2.
23 | */
24 | public class RefreshRecyclerViewAdapter extends RecyclerView.Adapter