1313import android .widget .BaseAdapter ;
1414
1515import 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>
0 commit comments