Skip to content

Commit 39788ff

Browse files
author
fengjian
committed
updata AdapterLesse
1 parent 967ef24 commit 39788ff

File tree

3 files changed

+139
-14
lines changed

3 files changed

+139
-14
lines changed

lesscode-core/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
22
apply plugin: 'com.github.dcendents.android-maven'
33
apply plugin: 'com.jfrog.bintray'
44

5-
version = "0.9.4" // #CONFIG# // project version
5+
version = "0.9.6" // #CONFIG# // project version
66

77
android {
88
compileSdkVersion 23

lesscode-core/src/main/java/com/jayfeng/lesscode/core/AdapterLess.java

Lines changed: 136 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import android.widget.BaseAdapter;
1414

1515
import java.util.List;
16+
import java.util.Objects;
1617

1718
/**
1819
* 适配器简化相关的工具类
@@ -27,17 +28,18 @@ public final class AdapterLess {
2728
* 1. 抽象出重复代码,默认实现一些常规代码
2829
* 2. 封装了RecyclerViewHolder
2930
* 3. 自动传递Model给getView
31+
*
3032
* @param context
31-
* @param list model的列表
32-
* @param layoutId 布局xml的id
33+
* @param list model的列表
34+
* @param layoutId 布局xml的id
3335
* @param recyclerCallBack 包含nBindViewHolder方法的回调
3436
* @param <T>r
3537
* @return
3638
*/
3739
public static <T> RecyclerView.Adapter<RecyclerViewHolder> $recycler(final Context context,
38-
final List<T> list,
39-
final int layoutId,
40-
final RecyclerCallBack recyclerCallBack) {
40+
final List<T> list,
41+
final int layoutId,
42+
final RecyclerCallBack recyclerCallBack) {
4143
RecyclerView.Adapter<RecyclerViewHolder> result = new RecyclerView.Adapter<RecyclerViewHolder>() {
4244
@Override
4345
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
@@ -72,17 +74,18 @@ public int getItemCount() {
7274
* 面向: RecyclerView
7375
* 支持多布局,也多增加了两个回调方法,便于自定义:
7476
* 1. getViewType
77+
*
7578
* @param context
76-
* @param list model的列表
77-
* @param layoutIds 布局xml的id
79+
* @param list model的列表
80+
* @param layoutIds 布局xml的id
7881
* @param fullRecyclerCallBack 包含nBindViewHolder方法的回调
7982
* @param <T>r
8083
* @return
8184
*/
8285
public static <T> RecyclerView.Adapter<RecyclerViewHolder> $recycler(final Context context,
83-
final List<T> list,
84-
final int[] layoutIds,
85-
final FullRecyclerCallBack fullRecyclerCallBack) {
86+
final List<T> list,
87+
final int[] layoutIds,
88+
final FullRecyclerCallBack fullRecyclerCallBack) {
8689
RecyclerView.Adapter<RecyclerViewHolder> result = new RecyclerView.Adapter<RecyclerViewHolder>() {
8790
@Override
8891
public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
@@ -123,8 +126,9 @@ public int getItemViewType(int position) {
123126
* 1. 抽象出重复代码,默认实现一些常规代码
124127
* 2. 封装了ViewHolder
125128
* 3. 自动传递Model给getView
129+
*
126130
* @param context
127-
* @param list model的列表
131+
* @param list model的列表
128132
* @param layoutId 布局xml的id
129133
* @param callBack 包含getView方法的回调
130134
* @param <T>
@@ -183,9 +187,10 @@ public View getView(int position, View convertView, ViewGroup parent) {
183187
* 支持多布局,也多增加了两个回调方法,便于自定义:
184188
* 1. getViewType
185189
* 2. isEnabled
190+
*
186191
* @param context
187-
* @param list model列表
188-
* @param layoutIds 布局xml的id数组
192+
* @param list model列表
193+
* @param layoutIds 布局xml的id数组
189194
* @param fullCallBack 包含getView,getViewType,isEnabled方法的回调
190195
* @param <T>
191196
* @return
@@ -259,6 +264,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
259264
* 1. 抽象出重复代码,默认实现一些常规代码
260265
* 2. 封装了instantiateItem
261266
* 3. 自动传递Model给getView
267+
*
262268
* @param context
263269
* @param list
264270
* @param layoutId
@@ -298,11 +304,108 @@ public void destroyItem(ViewGroup container, int position, Object object) {
298304
return result;
299305
}
300306

307+
/**
308+
* 创建PagerAdapter
309+
* 面向: ViewPager
310+
* 主要是:
311+
* 1. 增加destroyItem
312+
*
313+
* @param context
314+
* @param list
315+
* @param layoutId
316+
* @param fullPageCallBack
317+
* @param <T>
318+
* @return
319+
*/
320+
public static <T> PagerAdapter $pager(final Context context,
321+
final List<T> list,
322+
final int layoutId,
323+
final FullPageCallBack fullPageCallBack) {
324+
PagerAdapter result = new PagerAdapter() {
325+
326+
@Override
327+
public int getCount() {
328+
return list.size();
329+
}
330+
331+
@Override
332+
public boolean isViewFromObject(View view, Object object) {
333+
return view == object;
334+
}
335+
336+
@Override
337+
public Object instantiateItem(ViewGroup container, int position) {
338+
View view = LayoutInflater.from(context).inflate(layoutId, null);
339+
container.addView(view);
340+
fullPageCallBack.instantiateItem(position, view, list.get(position));
341+
return view;
342+
}
343+
344+
@Override
345+
public void destroyItem(ViewGroup container, int position, Object object) {
346+
container.removeView((View) object);
347+
fullPageCallBack.destroyItem(container, position, object, list.get(position));
348+
}
349+
};
350+
return result;
351+
}
352+
353+
public static <T> PagerAdapter $pagerWithDataChanged(final Context context,
354+
final List<T> list,
355+
final int layoutId,
356+
final FullPageCallBack fullPageCallBack) {
357+
PagerAdapter result = new PagerAdapter() {
358+
359+
private int mChildCount = 0;
360+
361+
@Override
362+
public int getCount() {
363+
return list.size();
364+
}
365+
366+
@Override
367+
public boolean isViewFromObject(View view, Object object) {
368+
return view == object;
369+
}
370+
371+
@Override
372+
public Object instantiateItem(ViewGroup container, int position) {
373+
View view = LayoutInflater.from(context).inflate(layoutId, null);
374+
container.addView(view);
375+
fullPageCallBack.instantiateItem(position, view, list.get(position));
376+
return view;
377+
}
378+
379+
@Override
380+
public void destroyItem(ViewGroup container, int position, Object object) {
381+
container.removeView((View) object);
382+
fullPageCallBack.destroyItem(container, position, object, list.get(position));
383+
}
384+
385+
@Override
386+
public int getItemPosition(Object object) {
387+
if (mChildCount > 0) {
388+
mChildCount--;
389+
return POSITION_NONE;
390+
}
391+
return super.getItemPosition(object);
392+
}
393+
394+
@Override
395+
public void notifyDataSetChanged() {
396+
mChildCount = getCount();
397+
super.notifyDataSetChanged();
398+
}
399+
};
400+
return result;
401+
}
402+
301403
/**
302404
* 创建了FragmentPagerAdapter
303405
* 面向: ViewPager
304406
* 主要是:
305407
* 1. 抽象出重复代码,默认实现getCount方法
408+
*
306409
* @param fragmentManager
307410
* @param count
308411
* @param fragmentPagerCallBack
@@ -332,6 +435,7 @@ public int getCount() {
332435
* 通过getPageTitle回调方法支持fragment标题定义
333436
* 主要是:
334437
* 1. 抽象出重复代码,默认实现getCount方法
438+
*
335439
* @param fragmentManager
336440
* @param count
337441
* @param fullFragmentPagerCallBack
@@ -362,6 +466,7 @@ public String getPageTitle(int position) {
362466

363467
/**
364468
* RecyclerCallBack
469+
*
365470
* @param <T>
366471
*/
367472
public interface RecyclerCallBack<T> {
@@ -370,15 +475,18 @@ public interface RecyclerCallBack<T> {
370475

371476
/**
372477
* RecyclerCallBack
478+
*
373479
* @param <T>
374480
*/
375481
public interface FullRecyclerCallBack<T> {
376482
void onBindViewHolder(int position, RecyclerViewHolder recyclerViewHolder, T t);
483+
377484
int getItemViewType(int position);
378485
}
379486

380487
/**
381488
* 简化版本的$base的CallBack
489+
*
382490
* @param <T>
383491
*/
384492
public interface CallBack<T> {
@@ -387,6 +495,7 @@ public interface CallBack<T> {
387495

388496
/**
389497
* 增强版本的$base的CallBack
498+
*
390499
* @param <T>
391500
*/
392501
public interface FullCallBack<T> {
@@ -399,12 +508,24 @@ public interface FullCallBack<T> {
399508

400509
/**
401510
* 简化版本的$pager的CallBack
511+
*
402512
* @param <T>
403513
*/
404514
public interface PageCallBack<T> {
405515
void instantiateItem(int position, View view, T t);
406516
}
407517

518+
/**
519+
* 简化版本的$pager的CallBack
520+
*
521+
* @param <T>
522+
*/
523+
public interface FullPageCallBack<T> {
524+
void instantiateItem(int position, View view, T t);
525+
526+
void destroyItem(ViewGroup container, int position, Object object, T t);
527+
}
528+
408529
/**
409530
* 简化版本的$pager的CallBack(针对fragment)
410531
*/
@@ -417,6 +538,7 @@ public interface FragmentPagerCallBack {
417538
*/
418539
public interface FullFragmentPagerCallBack {
419540
Fragment getItem(int position);
541+
420542
String getPageTitle(int position);
421543
}
422544

@@ -432,6 +554,7 @@ public static class ViewHolder {
432554

433555
/**
434556
* 从缓存里获取viewId对应的View
557+
*
435558
* @param convertView
436559
* @param viewId
437560
* @param <T>

lesscode-core/src/main/java/com/jayfeng/lesscode/core/other/SpaceDividerView.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,6 @@ protected void onDraw(Canvas canvas) {
6363
canvas.drawRect(0, getMeasuredHeight() - mSpaceBottom, getMeasuredWidth(), getMeasuredHeight(), mPaint);
6464
}
6565
}
66+
67+
6668
}

0 commit comments

Comments
 (0)