瀏覽代碼

Deprecated BaseViewHolder#bindData()
Rename BaseBannerQuickAdapter to BaseSimpleAdapter

zhpanvip 4 年之前
父節點
當前提交
12115069d4
共有 25 個文件被更改,包括 240 次插入514 次删除
  1. 1 1
      app/src/main/java/com/example/zhpan/banner/activity/MainActivity.kt
  2. 8 5
      app/src/main/java/com/example/zhpan/banner/activity/WelcomeActivity.kt
  3. 36 0
      app/src/main/java/com/example/zhpan/banner/adapter/DataBindingSampleAdapter.java
  4. 0 49
      app/src/main/java/com/example/zhpan/banner/adapter/HomeAdapter.java
  5. 0 41
      app/src/main/java/com/example/zhpan/banner/adapter/ImageResourceAdapter.java
  6. 59 0
      app/src/main/java/com/example/zhpan/banner/adapter/MultiViewTypesAdapter.java
  7. 41 0
      app/src/main/java/com/example/zhpan/banner/adapter/SimpleAdapter.kt
  8. 0 156
      app/src/main/java/com/example/zhpan/banner/adapter/SimpleBannerAdapter.java
  9. 38 0
      app/src/main/java/com/example/zhpan/banner/adapter/ViewBindingSampleAdapter.java
  10. 0 34
      app/src/main/java/com/example/zhpan/banner/adapter/WelcomeAdapter.kt
  11. 2 2
      app/src/main/java/com/example/zhpan/banner/adapter/others/AdapterFragmentPager.kt
  12. 9 4
      app/src/main/java/com/example/zhpan/banner/adapter/others/ArticleAdapter.kt
  13. 5 5
      app/src/main/java/com/example/zhpan/banner/fragment/HomeFragment.java
  14. 2 21
      app/src/main/java/com/example/zhpan/banner/fragment/IndicatorFragment.java
  15. 2 2
      app/src/main/java/com/example/zhpan/banner/fragment/OthersFragment.java
  16. 2 2
      app/src/main/java/com/example/zhpan/banner/fragment/PageFragment.java
  17. 0 41
      app/src/main/java/com/example/zhpan/banner/viewholder/CustomPageViewHolder.java
  18. 0 29
      app/src/main/java/com/example/zhpan/banner/viewholder/ImageResourceViewHolder.java
  19. 0 5
      app/src/main/java/com/example/zhpan/banner/viewholder/NewTypeViewHolder.java
  20. 0 7
      app/src/main/java/com/example/zhpan/banner/viewholder/ServerImageViewHolder.java
  21. 8 37
      bannerview/src/main/java/com/zhpan/bannerview/BaseBannerAdapter.java
  22. 0 47
      bannerview/src/main/java/com/zhpan/bannerview/BaseBannerQuickAdapter.java
  23. 0 23
      bannerview/src/main/java/com/zhpan/bannerview/BaseBannerViewHolder.java
  24. 19 0
      bannerview/src/main/java/com/zhpan/bannerview/BaseSimpleAdapter.java
  25. 8 3
      bannerview/src/main/java/com/zhpan/bannerview/BaseViewHolder.java

+ 1 - 1
app/src/main/java/com/example/zhpan/banner/activity/MainActivity.kt

@@ -7,7 +7,7 @@ import androidx.appcompat.app.ActionBarDrawerToggle
 import androidx.appcompat.app.AppCompatActivity
 import androidx.viewpager2.widget.ViewPager2
 import com.example.zhpan.banner.R
-import com.example.zhpan.banner.adapter.AdapterFragmentPager
+import com.example.zhpan.banner.adapter.others.AdapterFragmentPager
 import com.google.android.material.navigation.NavigationView
 import kotlinx.android.synthetic.main.activity_main.*
 

+ 8 - 5
app/src/main/java/com/example/zhpan/banner/activity/WelcomeActivity.kt

@@ -9,10 +9,9 @@ import androidx.core.content.ContextCompat
 import androidx.viewpager2.widget.ViewPager2
 import com.blankj.utilcode.util.ToastUtils
 import com.example.zhpan.banner.R
-import com.example.zhpan.banner.adapter.WelcomeAdapter
+import com.example.zhpan.banner.adapter.SimpleAdapter
 import com.example.zhpan.banner.bean.CustomBean
 import com.example.zhpan.banner.transform.PageTransformerFactory
-import com.example.zhpan.banner.viewholder.CustomPageViewHolder
 import com.zhpan.bannerview.BannerViewPager
 import com.example.zhpan.banner.transform.TransformerStyle
 import com.zhpan.bannerview.utils.BannerUtils
@@ -26,7 +25,7 @@ class WelcomeActivity : BaseDataActivity() {
 
     private val des = arrayOf("在这里\n你可以听到周围人的心声", "在这里\nTA会在下一秒遇见你", "在这里\n不再错过可以改变你一生的人")
 
-    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION,  TransformerStyle.DEPTH, TransformerStyle.ROTATE, TransformerStyle.SCALE_IN)
+    private val transforms = intArrayOf(TransformerStyle.NONE, TransformerStyle.ACCORDION, TransformerStyle.DEPTH, TransformerStyle.ROTATE, TransformerStyle.SCALE_IN)
 
     private val data: List<CustomBean>
         get() {
@@ -62,8 +61,12 @@ class WelcomeActivity : BaseDataActivity() {
                     updateUI(position)
                 }
             })
-            setAdapter(WelcomeAdapter().apply {
-                mOnSubViewClickListener = CustomPageViewHolder.OnSubViewClickListener { _, position -> ToastUtils.showShort("Logo Clicked,position:$position") }
+            setAdapter(SimpleAdapter().apply {
+                mOnSubViewClickListener = object : SimpleAdapter.OnSubViewClickListener {
+                    override fun onViewClick(view: View?, position: Int) {
+                        ToastUtils.showShort("Logo Clicked,position:$position")
+                    }
+                }
             })
             setIndicatorSliderColor(ContextCompat.getColor(this@WelcomeActivity, R.color.white),
                     ContextCompat.getColor(this@WelcomeActivity, R.color.white_alpha_75))

+ 36 - 0
app/src/main/java/com/example/zhpan/banner/adapter/DataBindingSampleAdapter.java

@@ -0,0 +1,36 @@
+package com.example.zhpan.banner.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.databinding.DataBindingUtil;
+
+import com.example.zhpan.banner.R;
+import com.example.zhpan.banner.databinding.ItemSlideModelDataBindingBinding;
+import com.zhpan.bannerview.BaseSimpleAdapter;
+import com.zhpan.bannerview.BaseViewHolder;
+
+
+/**
+ * <pre>
+ *   Created by zhpan on 2020/4/5.
+ *   Description:使用DataBinding示例
+ * </pre>
+ */
+public class DataBindingSampleAdapter extends BaseSimpleAdapter<Integer> {
+
+    private ItemSlideModelDataBindingBinding mItemViewDataBinding;
+
+    @Override
+    protected void bindData(BaseViewHolder<Integer> holder, Integer data, int position, int pageSize) {
+        mItemViewDataBinding.bannerImage.setImageResource(data);
+    }
+
+    @Override
+    protected View createItemView(ViewGroup parent, int viewType) {
+        mItemViewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),
+                R.layout.item_slide_model_data_binding, parent, false);
+        return mItemViewDataBinding.getRoot();
+    }
+}

+ 0 - 49
app/src/main/java/com/example/zhpan/banner/adapter/HomeAdapter.java

@@ -1,49 +0,0 @@
-package com.example.zhpan.banner.adapter;
-
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.net.BannerData;
-import com.example.zhpan.banner.viewholder.ServerImageViewHolder;
-import com.example.zhpan.banner.viewholder.NewTypeViewHolder;
-import com.zhpan.bannerview.BaseBannerAdapter;
-import com.zhpan.bannerview.BaseViewHolder;
-
-import org.jetbrains.annotations.NotNull;
-
-/**
- * <pre>
- *   Created by zhpan on 2020/4/6.
- *   Description:
- * </pre>
- */
-public class HomeAdapter extends BaseBannerAdapter<BannerData, BaseViewHolder<BannerData>> {
-
-    @Override
-    protected void onBind(BaseViewHolder<BannerData> holder, BannerData data, int position, int pageSize) {
-        holder.bindData(data, position, pageSize);
-    }
-
-    @Override
-    public BaseViewHolder<BannerData> createViewHolder(@NotNull ViewGroup parent, View itemView, int viewType) {
-        if (viewType == BannerData.TYPE_NEW) {
-            return new NewTypeViewHolder(itemView);
-        }
-        return new ServerImageViewHolder(itemView);
-    }
-
-    @Override
-    public int getViewType(int position) {
-        return mList.get(position).getType();
-    }
-
-    @Override
-    public int getLayoutId(int viewType) {
-        if (viewType == BannerData.TYPE_NEW) {
-            return R.layout.item_new_type;
-        }
-        return R.layout.item_net_image;
-    }
-}
-

+ 0 - 41
app/src/main/java/com/example/zhpan/banner/adapter/ImageResourceAdapter.java

@@ -1,41 +0,0 @@
-package com.example.zhpan.banner.adapter;
-
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.viewholder.ImageResourceViewHolder;
-import com.zhpan.bannerview.BaseBannerAdapter;
-
-import org.jetbrains.annotations.NotNull;
-
-/**
- * <pre>
- *   Created by zhpan on 2020/4/5.
- *   Description:
- * </pre>
- */
-public class ImageResourceAdapter extends BaseBannerAdapter<Integer, ImageResourceViewHolder> {
-
-    private int roundCorner;
-
-    public ImageResourceAdapter(int roundCorner) {
-        this.roundCorner = roundCorner;
-    }
-
-
-    @Override
-    protected void onBind(ImageResourceViewHolder holder, Integer data, int position, int pageSize) {
-        holder.bindData(data, position, pageSize);
-    }
-
-    @Override
-    public ImageResourceViewHolder createViewHolder(@NotNull ViewGroup parent, View itemView, int viewType) {
-        return new ImageResourceViewHolder(itemView, roundCorner);
-    }
-
-    @Override
-    public int getLayoutId(int viewType) {
-        return R.layout.item_slide_mode;
-    }
-}

+ 59 - 0
app/src/main/java/com/example/zhpan/banner/adapter/MultiViewTypesAdapter.java

@@ -0,0 +1,59 @@
+package com.example.zhpan.banner.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.bumptech.glide.Glide;
+import com.example.zhpan.banner.R;
+import com.example.zhpan.banner.net.BannerData;
+import com.example.zhpan.banner.view.CornerImageView;
+import com.example.zhpan.banner.viewholder.ServerImageViewHolder;
+import com.example.zhpan.banner.viewholder.NewTypeViewHolder;
+import com.zhpan.bannerview.BaseBannerAdapter;
+import com.zhpan.bannerview.BaseViewHolder;
+import com.zhpan.bannerview.utils.BannerUtils;
+
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * <pre>
+ *   Created by zhpan on 2020/4/6.
+ *   Description:Multiple view types adapter sample.
+ * </pre>
+ */
+public class MultiViewTypesAdapter extends BaseBannerAdapter<BannerData, BaseViewHolder<BannerData>> {
+
+    @Override
+    protected void bindData(BaseViewHolder<BannerData> holder, BannerData data, int position, int pageSize) {
+        if (holder instanceof ServerImageViewHolder) {
+            CornerImageView imageView = holder.findView(R.id.banner_image);
+            Glide.with(imageView).load(data.getImagePath()).placeholder(R.drawable.placeholder).into(imageView);
+            BannerUtils.log("ServerImageViewHolder", "position:" + position);
+        } else if (holder instanceof NewTypeViewHolder) {
+            holder.setImageResource(R.id.image_view, data.getDrawable());
+        }
+    }
+
+    @Override
+    public BaseViewHolder<BannerData> createViewHolder(@NotNull ViewGroup parent, View itemView, int viewType) {
+        if (viewType == BannerData.TYPE_NEW) {
+            return new NewTypeViewHolder(itemView);
+        }
+        return new ServerImageViewHolder(itemView);
+    }
+
+    @Override
+    public int getViewType(int position) {
+        return mList.get(position).getType();
+    }
+
+    @Override
+    protected View createItemView(ViewGroup parent, int viewType) {
+        if (viewType == BannerData.TYPE_NEW) {
+            return LayoutInflater.from(parent.getContext()).inflate(R.layout.item_new_type, parent, false);
+        }
+        return LayoutInflater.from(parent.getContext()).inflate(R.layout.item_net_image, parent, false);
+    }
+}
+

+ 41 - 0
app/src/main/java/com/example/zhpan/banner/adapter/SimpleAdapter.kt

@@ -0,0 +1,41 @@
+package com.example.zhpan.banner.adapter
+
+import android.animation.ObjectAnimator
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import com.example.zhpan.banner.R
+import com.example.zhpan.banner.bean.CustomBean
+import com.zhpan.bannerview.BaseSimpleAdapter
+import com.zhpan.bannerview.BaseViewHolder
+
+/**
+ * <pre>
+ * Created by zhpan on 2020/4/5.
+ * Description:
+</pre> *
+ */
+class SimpleAdapter : BaseSimpleAdapter<CustomBean>() {
+
+    var mOnSubViewClickListener: OnSubViewClickListener? = null
+
+    override fun bindData(holder: BaseViewHolder<CustomBean>, data: CustomBean?, position: Int, pageSize: Int) {
+        val imageStart: ImageView = holder.findView(R.id.iv_logo)
+        holder.setImageResource(R.id.banner_image, data!!.imageRes)
+        holder.setOnClickListener(R.id.iv_logo) { view: View? ->
+            if (null != mOnSubViewClickListener) mOnSubViewClickListener!!.onViewClick(view, holder.adapterPosition)
+        }
+        val alphaAnimator = ObjectAnimator.ofFloat(imageStart, "alpha", 0f, 1f)
+        alphaAnimator.duration = 1500
+        alphaAnimator.start()
+    }
+
+    override fun createItemView(parent: ViewGroup, viewType: Int): View {
+        return LayoutInflater.from(parent.context).inflate(R.layout.item_custom_view, parent, false)
+    }
+
+    interface OnSubViewClickListener {
+        fun onViewClick(view: View?, position: Int)
+    }
+}

+ 0 - 156
app/src/main/java/com/example/zhpan/banner/adapter/SimpleBannerAdapter.java

@@ -1,156 +0,0 @@
-package com.example.zhpan.banner.adapter;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import androidx.databinding.DataBindingUtil;
-
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.databinding.ItemSlideModeBinding;
-import com.example.zhpan.banner.databinding.ItemSlideModelDataBindingBinding;
-import com.example.zhpan.banner.view.CornerImageView;
-import com.zhpan.bannerview.BaseBannerQuickAdapter;
-import com.zhpan.bannerview.BaseBannerViewHolder;
-
-/**
- * @author DBoy
- * @date 2020/12/11
- * Class 描述 : 简单Adapter示例:
- * 这个adapter使用四种方式进行适配数据,主要是简化了 adapter的构建繁琐的问题。
- * <p>
- * 主要使用方式 继承BaseBannerQuickAdapter<T> 泛型为数据类
- * 实现 {@link #convert(BaseBannerViewHolder, Integer, int, int)} 方法进行数据填充适配
- * <p>
- * 重写{@link #getLayoutId(int)} 设置布局
- * 或者 可以重写{@link #createBindingView(Context, ViewGroup, int)} 使用其他方式:
- * <p>
- * ==== 其他方式 ====
- * 可以使用ViewBinding填充数据;
- * 可以使用DataBinding填充数据;
- * 修改{@link SimpleBannerAdapter#type} 的值进行预览效果;
- * {@link #Use_LayoutId}
- * {@link #Use_ViewBinding}
- * {@link #Use_DataBinding}
- * {@link #Use_fool}
- */
-public class SimpleBannerAdapter extends BaseBannerQuickAdapter<Integer> {
-
-    /**
-     * 使用布局
-     */
-    private final int Use_LayoutId = 0;
-
-    /**
-     * 使用ViewBinding
-     */
-    private final int Use_ViewBinding = 1;
-
-    /**
-     * 使用DataBinding
-     */
-    private final int Use_DataBinding = 2;
-    /**
-     * 自己构建view
-     */
-    private final int Use_fool = 3;
-
-    /**
-     * 示例使用方式
-     */
-    private final int type = Use_ViewBinding;
-    //圆角
-    private final int mRoundCorner;
-    //示例使用ViewBinding
-    private ItemSlideModeBinding mItemViewBinding;
-    //示例使用DataBinding
-    private ItemSlideModelDataBindingBinding mItemViewDataBinding;
-
-    public SimpleBannerAdapter(int roundCorner) {
-        mRoundCorner = roundCorner;
-    }
-
-    @Override
-    protected void convert(BaseBannerViewHolder<Integer> holder, Integer data, int position, int pageSize) {
-        switch (type) {
-            case Use_LayoutId:
-                convertLayoutId(holder, data, position, pageSize);
-                break;
-            case Use_ViewBinding:
-                convertViewBinding(data, position, pageSize);
-                break;
-            case Use_DataBinding:
-                convertDataBinding(data, position, pageSize);
-                break;
-            case Use_fool:
-                convertLayoutId(holder, data, position, pageSize);
-                break;
-        }
-
-    }
-
-    @Override
-    protected View createBindingView(Context context, ViewGroup parent, int viewType) {
-        switch (type) {
-            case Use_fool:
-                //这我就不说了
-                CornerImageView cornerImageView = new CornerImageView(context);
-                cornerImageView.setId(R.id.banner_image);
-                cornerImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-                ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
-                cornerImageView.setLayoutParams(params);
-                return cornerImageView;
-            case Use_ViewBinding:
-                //使用ViewBinding创建View
-                mItemViewBinding = ItemSlideModeBinding.inflate(LayoutInflater.from(context), parent, false);
-                return mItemViewBinding.getRoot();
-            case Use_DataBinding:
-                //使用DataBinding创建View
-                mItemViewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_slide_model_data_binding, parent, false);
-                return mItemViewDataBinding.getRoot();
-            default:
-                //  LayoutId 返回了确切的布局id 是不执行 createBindingView的
-                return null;
-        }
-
-    }
-
-    @Override
-    public int getLayoutId(int viewType) {
-        if (type == Use_LayoutId) {
-            return R.layout.item_slide_mode;
-        } else {
-            return super.getLayoutId(viewType);
-        }
-    }
-
-    /**
-     * 使用布局id填充数据
-     */
-    private void convertLayoutId(BaseBannerViewHolder<Integer> holder, Integer data, int position, int pageSize) {
-        CornerImageView imageView = holder.findView(R.id.banner_image);
-        imageView.setRoundCorner(mRoundCorner);
-        imageView.setImageResource(data);
-    }
-
-    /**
-     * 使用ViewBinding填充数据
-     */
-    private void convertViewBinding(Integer data, int position, int pageSize) {
-        mItemViewBinding.bannerImage.setRoundCorner(mRoundCorner);
-        mItemViewBinding.bannerImage.setImageResource(data);
-    }
-
-    /**
-     * 使用DataBinding填充数据
-     */
-    private void convertDataBinding(Integer data, int position, int pageSize) {
-        mItemViewDataBinding.bannerImage.setRoundCorner(mRoundCorner);
-        mItemViewDataBinding.bannerImage.setImageResource(data);
-    }
-
-
-}
-

+ 38 - 0
app/src/main/java/com/example/zhpan/banner/adapter/ViewBindingSampleAdapter.java

@@ -0,0 +1,38 @@
+package com.example.zhpan.banner.adapter;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.example.zhpan.banner.databinding.ItemSlideModeBinding;
+import com.zhpan.bannerview.BaseSimpleAdapter;
+import com.zhpan.bannerview.BaseViewHolder;
+
+/**
+ * @author DBoy
+ * @date 2020/12/11
+ * Class 描述 : 使用ViewBinding示例
+ */
+public class ViewBindingSampleAdapter extends BaseSimpleAdapter<Integer> {
+    //圆角
+    private final int mRoundCorner;
+    //示例使用ViewBinding
+    private ItemSlideModeBinding mItemViewBinding;
+    public ViewBindingSampleAdapter(int roundCorner) {
+        mRoundCorner = roundCorner;
+    }
+
+    @Override
+    protected void bindData(BaseViewHolder<Integer> holder, Integer data, int position, int pageSize) {
+        mItemViewBinding.bannerImage.setRoundCorner(mRoundCorner);
+        mItemViewBinding.bannerImage.setImageResource(data);
+    }
+
+    @Override
+    protected View createItemView(ViewGroup parent, int viewType) {
+        mItemViewBinding = ItemSlideModeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
+        return mItemViewBinding.getRoot();
+    }
+
+}
+

+ 0 - 34
app/src/main/java/com/example/zhpan/banner/adapter/WelcomeAdapter.kt

@@ -1,34 +0,0 @@
-package com.example.zhpan.banner.adapter
-
-import android.view.View
-import android.view.ViewGroup
-import com.example.zhpan.banner.R
-
-import com.example.zhpan.banner.bean.CustomBean
-import com.example.zhpan.banner.viewholder.CustomPageViewHolder
-import com.zhpan.bannerview.BaseBannerAdapter
-
-/**
- * <pre>
- * Created by zhpan on 2020/4/5.
- * Description:
-</pre> *
- */
-class WelcomeAdapter : BaseBannerAdapter<CustomBean, CustomPageViewHolder>() {
-
-    var mOnSubViewClickListener: CustomPageViewHolder.OnSubViewClickListener? = null
-
-    override fun onBind(holder: CustomPageViewHolder, data: CustomBean, position: Int, pageSize: Int) {
-        holder.bindData(data, position, pageSize)
-    }
-
-    override fun createViewHolder(parent: ViewGroup, itemView: View, viewType: Int): CustomPageViewHolder? {
-        val customPageViewHolder = CustomPageViewHolder(itemView)
-        customPageViewHolder.setOnSubViewClickListener(mOnSubViewClickListener)
-        return customPageViewHolder
-    }
-
-    override fun getLayoutId(viewType: Int): Int {
-        return R.layout.item_custom_view
-    }
-}

+ 2 - 2
app/src/main/java/com/example/zhpan/banner/adapter/AdapterFragmentPager.kt → app/src/main/java/com/example/zhpan/banner/adapter/others/AdapterFragmentPager.kt

@@ -1,4 +1,4 @@
-package com.example.zhpan.banner.adapter
+package com.example.zhpan.banner.adapter.others
 
 import android.util.SparseArray
 import androidx.fragment.app.Fragment
@@ -9,7 +9,7 @@ import com.example.zhpan.banner.fragment.*
 /**
  * <pre>
  * Created by zhangpan on 2019-12-05.
- * Description:
+ * Description: MainActivity Fragment Adapter.
 </pre> *
  */
 class AdapterFragmentPager(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {

+ 9 - 4
app/src/main/java/com/example/zhpan/banner/adapter/ArticleAdapter.kt → app/src/main/java/com/example/zhpan/banner/adapter/others/ArticleAdapter.kt

@@ -1,4 +1,4 @@
-package com.example.zhpan.banner.adapter
+package com.example.zhpan.banner.adapter.others
 
 import android.content.Context
 import android.content.res.Resources
@@ -8,16 +8,20 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
 import androidx.viewpager2.widget.ViewPager2
 
 import com.example.zhpan.banner.R
+import com.example.zhpan.banner.adapter.DataBindingSampleAdapter
 import com.example.zhpan.banner.bean.ArticleWrapper
-import com.example.zhpan.banner.viewholder.ImageResourceViewHolder
 import com.zhpan.bannerview.BannerViewPager
 import com.zhpan.indicator.enums.IndicatorStyle
 
 import java.util.ArrayList
 
+/**
+ * HomeFragment RecyclerView Adapter
+ */
 class ArticleAdapter(val context: Context, data: List<ArticleWrapper.Article>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
     private val mList = ArrayList<ArticleWrapper.Article>()
     private val inflater: LayoutInflater
@@ -41,10 +45,11 @@ class ArticleAdapter(val context: Context, data: List<ArticleWrapper.Article>) :
                     .setIndicatorStyle(IndicatorStyle.ROUND_RECT)
                     .setIndicatorSliderGap(holder.resources.getDimensionPixelOffset(R.dimen.dp_4))
                     .setIndicatorSliderWidth(holder.resources.getDimensionPixelOffset(R.dimen.dp_4), holder.resources.getDimensionPixelOffset(R.dimen.dp_10))
-                    .setIndicatorSliderColor(holder.resources.getColor(R.color.red_normal_color), holder.resources.getColor(R.color.red_checked_color))
+                    .setIndicatorSliderColor(ContextCompat.getColor(holder.itemView.context, R.color.red_normal_color),
+                            ContextCompat.getColor(holder.itemView.context, R.color.red_checked_color))
                     .setOrientation(ViewPager2.ORIENTATION_VERTICAL)
                     .setInterval(2000)
-                    .setAdapter(SimpleBannerAdapter(0)).create(article.pagers)
+                    .setAdapter(DataBindingSampleAdapter()).create(article.pagers)
         } else if (holder is ArticleViewHolder) {
             holder.tvAuthor.text = article.author
             holder.tvTitle.text = article.title

+ 5 - 5
app/src/main/java/com/example/zhpan/banner/fragment/HomeFragment.java

@@ -14,9 +14,9 @@ import androidx.viewpager2.widget.ViewPager2;
 import com.blankj.utilcode.util.LogUtils;
 import com.example.zhpan.banner.R;
 import com.example.zhpan.banner.activity.WebViewActivity;
-import com.example.zhpan.banner.adapter.ArticleAdapter;
-import com.example.zhpan.banner.adapter.HomeAdapter;
-import com.example.zhpan.banner.adapter.SimpleBannerAdapter;
+import com.example.zhpan.banner.adapter.others.ArticleAdapter;
+import com.example.zhpan.banner.adapter.MultiViewTypesAdapter;
+import com.example.zhpan.banner.adapter.ViewBindingSampleAdapter;
 import com.example.zhpan.banner.bean.ArticleWrapper;
 import com.example.zhpan.banner.bean.DataWrapper;
 import com.example.zhpan.banner.net.BannerData;
@@ -167,7 +167,7 @@ public class HomeFragment extends BaseFragment {
                 .disallowInterceptTouchEvent(true)
                 .setIndicatorView(mIndicatorView)   // 这里为了设置标题故用了自定义Indicator,如果无需标题则没必要添加此行代码
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
-                .setAdapter(new HomeAdapter())
+                .setAdapter(new MultiViewTypesAdapter())
                 .registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
                     @Override
                     public void onPageSelected(int position) {
@@ -192,7 +192,7 @@ public class HomeFragment extends BaseFragment {
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color))
                 .setOrientation(ViewPager2.ORIENTATION_VERTICAL)
                 .setInterval(2000)
-                .setAdapter(new SimpleBannerAdapter(0)).create(getPicList(4));
+                .setAdapter(new ViewBindingSampleAdapter(0)).create(getPicList(4));
     }
 
     private void onPageClicked(View clickedView,int position) {

+ 2 - 21
app/src/main/java/com/example/zhpan/banner/fragment/IndicatorFragment.java

@@ -2,23 +2,19 @@ package com.example.zhpan.banner.fragment;
 
 import android.os.Bundle;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.RadioButton;
 import android.widget.RadioGroup;
 
 import com.blankj.utilcode.util.ToastUtils;
 import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.viewholder.ImageResourceViewHolder;
+import com.example.zhpan.banner.adapter.ViewBindingSampleAdapter;
 import com.zhpan.bannerview.BannerViewPager;
-import com.zhpan.bannerview.BaseBannerAdapter;
 import com.zhpan.bannerview.constants.IndicatorGravity;
 import com.zhpan.bannerview.utils.BannerUtils;
 import com.zhpan.indicator.annotation.AIndicatorSlideMode;
 import com.zhpan.indicator.enums.IndicatorSlideMode;
 import com.zhpan.indicator.enums.IndicatorStyle;
 
-import org.jetbrains.annotations.NotNull;
-
 /**
  * Created by zhpan on 2018/7/24.
  */
@@ -58,22 +54,7 @@ public class IndicatorFragment extends BaseFragment {
                 .setLifecycleRegistry(getLifecycle())
                 .setIndicatorGravity(IndicatorGravity.CENTER)
                 .setOnPageClickListener((clickedView, position) -> ToastUtils.showShort("position:" + position))
-                .setAdapter(new BaseBannerAdapter<Integer, ImageResourceViewHolder>() {
-                    @Override
-                    protected void onBind(ImageResourceViewHolder holder, Integer data, int position, int pageSize) {
-                        holder.bindData(data, position, pageSize);
-                    }
-
-                    @Override
-                    public ImageResourceViewHolder createViewHolder(@NotNull ViewGroup parent, View itemView, int viewType) {
-                        return new ImageResourceViewHolder(itemView, getResources().getDimensionPixelOffset(R.dimen.dp_8));
-                    }
-
-                    @Override
-                    public int getLayoutId(int viewType) {
-                        return R.layout.item_page_indicator;
-                    }
-                }).create();
+                .setAdapter(new ViewBindingSampleAdapter(getResources().getDimensionPixelOffset(R.dimen.dp_8))).create();
         initRadioGroup();
         mViewPager.setUserInputEnabled(true);
     }

+ 2 - 2
app/src/main/java/com/example/zhpan/banner/fragment/OthersFragment.java

@@ -11,7 +11,7 @@ import androidx.annotation.NonNull;
 import com.blankj.utilcode.util.LogUtils;
 import com.blankj.utilcode.util.ToastUtils;
 import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.adapter.SimpleBannerAdapter;
+import com.example.zhpan.banner.adapter.ViewBindingSampleAdapter;
 import com.example.zhpan.banner.view.FigureIndicatorView;
 import com.scwang.smartrefresh.header.MaterialHeader;
 import com.scwang.smartrefresh.layout.SmartRefreshLayout;
@@ -79,7 +79,7 @@ public class OthersFragment extends BaseFragment implements View.OnClickListener
                     int currentItem = mViewPager.getCurrentItem();
                     LogUtils.e("currentItem:", currentItem + "");
                 })
-                .setAdapter(new SimpleBannerAdapter(0))
+                .setAdapter(new ViewBindingSampleAdapter(0))
                 .setOnPageClickListener((clickedView, position) -> ToastUtils.showShort("Position:" + position))
                 .setIndicatorSliderColor(getColor(R.color.red_normal_color), getColor(R.color.red_checked_color)).create();
         initRadioGroup();

+ 2 - 2
app/src/main/java/com/example/zhpan/banner/fragment/PageFragment.java

@@ -6,7 +6,7 @@ import android.widget.RadioGroup;
 
 import com.blankj.utilcode.util.ToastUtils;
 import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.adapter.SimpleBannerAdapter;
+import com.example.zhpan.banner.adapter.ViewBindingSampleAdapter;
 import com.zhpan.bannerview.BannerViewPager;
 import com.zhpan.bannerview.annotation.APageStyle;
 import com.zhpan.bannerview.constants.PageStyle;
@@ -45,7 +45,7 @@ public class PageFragment extends BaseFragment {
                 .setIndicatorSliderRadius(getResources().getDimensionPixelOffset(R.dimen.dp_4), getResources().getDimensionPixelOffset(R.dimen.dp_5))
                 .setLifecycleRegistry(getLifecycle())
                 .setOnPageClickListener(this::pageClick)
-                .setAdapter(new SimpleBannerAdapter(getResources().getDimensionPixelOffset(R.dimen.dp_8)))
+                .setAdapter(new ViewBindingSampleAdapter(getResources().getDimensionPixelOffset(R.dimen.dp_8)))
                 .setInterval(5000);
         initRadioGroup();
         view.findViewById(R.id.rb_multi_page_overlap).performClick();

+ 0 - 41
app/src/main/java/com/example/zhpan/banner/viewholder/CustomPageViewHolder.java

@@ -1,41 +0,0 @@
-package com.example.zhpan.banner.viewholder;
-
-import android.animation.ObjectAnimator;
-import android.view.View;
-import android.widget.ImageView;
-
-import androidx.annotation.NonNull;
-
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.bean.CustomBean;
-import com.zhpan.bannerview.BaseViewHolder;
-
-public class CustomPageViewHolder extends BaseViewHolder<CustomBean> {
-
-    private OnSubViewClickListener mOnSubViewClickListener;
-
-    public CustomPageViewHolder(@NonNull View itemView) {
-        super(itemView);
-    }
-
-    @Override
-    public void bindData(CustomBean data, int position, int pageSize) {
-        ImageView imageStart = findView(R.id.iv_logo);
-        setImageResource(R.id.banner_image, data.getImageRes());
-        setOnClickListener(R.id.iv_logo, view -> {
-            if (null != mOnSubViewClickListener)
-                mOnSubViewClickListener.onViewClick(view, getAdapterPosition());
-        });
-        ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(imageStart, "alpha", 0, 1);
-        alphaAnimator.setDuration(1500);
-        alphaAnimator.start();
-    }
-
-    public void setOnSubViewClickListener(OnSubViewClickListener subViewClickListener) {
-        mOnSubViewClickListener = subViewClickListener;
-    }
-
-    public interface OnSubViewClickListener {
-        void onViewClick(View view, int position);
-    }
-}

+ 0 - 29
app/src/main/java/com/example/zhpan/banner/viewholder/ImageResourceViewHolder.java

@@ -1,29 +0,0 @@
-package com.example.zhpan.banner.viewholder;
-
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.view.CornerImageView;
-import com.zhpan.bannerview.BaseViewHolder;
-
-/**
- * <pre>
- *   Created by zhangpan on 2019-08-14.
- *   Description:
- * </pre>
- */
-public class ImageResourceViewHolder extends BaseViewHolder<Integer> {
-
-    public ImageResourceViewHolder(@NonNull View itemView,int roundCorner) {
-        super(itemView);
-        CornerImageView imageView = findView(R.id.banner_image);
-        imageView.setRoundCorner(roundCorner);
-    }
-
-    @Override
-    public void bindData(Integer data, int position, int pageSize) {
-        setImageResource(R.id.banner_image, data);
-    }
-}

+ 0 - 5
app/src/main/java/com/example/zhpan/banner/viewholder/NewTypeViewHolder.java

@@ -19,9 +19,4 @@ public class NewTypeViewHolder extends BaseViewHolder<BannerData> {
     public NewTypeViewHolder(@NonNull View itemView) {
         super(itemView);
     }
-
-    @Override
-    public void bindData(BannerData data, int position, int pageSize) {
-        setImageResource(R.id.image_view, data.getDrawable());
-    }
 }

+ 0 - 7
app/src/main/java/com/example/zhpan/banner/viewholder/ServerImageViewHolder.java

@@ -24,11 +24,4 @@ public class ServerImageViewHolder extends BaseViewHolder<BannerData> {
         CornerImageView imageView = findView(R.id.banner_image);
         imageView.setRoundCorner(BannerUtils.dp2px(0));
     }
-
-    @Override
-    public void bindData(BannerData data, int position, int pageSize) {
-        CornerImageView imageView = findView(R.id.banner_image);
-        Glide.with(imageView).load(data.getImagePath()).placeholder(R.drawable.placeholder).into(imageView);
-        BannerUtils.log("ServerImageViewHolder", "position:" + position);
-    }
 }

+ 8 - 37
bannerview/src/main/java/com/zhpan/bannerview/BaseBannerAdapter.java

@@ -1,7 +1,5 @@
 package com.zhpan.bannerview;
 
-import android.content.Context;
-import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -15,6 +13,8 @@ import java.util.List;
 
 /**
  * Created by zhpan on 2017/3/28.
+ * Base Adapter of BVP,Multiple view types can extends this class.
+ * For single view type,Please use {@link BaseSimpleAdapter<T>}
  */
 public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder<T>> extends RecyclerView.Adapter<VH> {
 
@@ -23,43 +23,13 @@ public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder<T>> extends
     protected List<T> mList = new ArrayList<>();
 
     private boolean isCanLoop;
-    /**
-     * 页面点击回调
-     */
-    private BannerViewPager.OnPageClickListener mPageClickListener;
-    /**
-     * 上下问
-     */
-    protected Context mContext;
 
-    @Override
-    public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
-        super.onAttachedToRecyclerView(recyclerView);
-        mContext = recyclerView.getContext();
-    }
+    private BannerViewPager.OnPageClickListener mPageClickListener;
 
     @NonNull
     @Override
     public final VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
-        View inflate;
-        int layoutId = getLayoutId(viewType);
-        if (layoutId <= 0) {
-            inflate = createBindingView(getContext(), parent, viewType);
-        } else {
-            inflate = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
-        }
-        return createViewHolder(parent, inflate, viewType);
-    }
-
-    /**
-     * 创建ViewHolder中的根View,重写此方法创建View;使用此方法后{@link #getLayoutId(int)}失效
-     */
-    protected View createBindingView(Context context, ViewGroup parent, int viewType) {
-        return null;
-    }
-
-    public Context getContext() {
-        return mContext;
+        return createViewHolder(parent, createItemView(parent, viewType), viewType);
     }
 
     @Override
@@ -73,7 +43,7 @@ public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder<T>> extends
                 }
             }
         });
-        onBind(holder, mList.get(realPosition), realPosition, mList.size());
+        bindData(holder, mList.get(realPosition), realPosition, mList.size());
     }
 
     @Override
@@ -118,9 +88,10 @@ public abstract class BaseBannerAdapter<T, VH extends BaseViewHolder<T>> extends
         return 0;
     }
 
-    protected abstract void onBind(VH holder, T data, int position, int pageSize);
+    protected abstract void bindData(VH holder, T data, int position, int pageSize);
+
+    protected abstract View createItemView(ViewGroup parent, int viewType);
 
     public abstract VH createViewHolder(@NonNull ViewGroup parent, View itemView, int viewType);
 
-    public abstract int getLayoutId(int viewType);
 }

+ 0 - 47
bannerview/src/main/java/com/zhpan/bannerview/BaseBannerQuickAdapter.java

@@ -1,47 +0,0 @@
-package com.zhpan.bannerview;
-
-import android.view.View;
-import android.view.ViewGroup;
-
-import androidx.annotation.NonNull;
-
-/**
- * @author DBoy
- * @date 2020/12/11
- * Class 描述 : 快速创建adapter使用
- */
-public abstract class BaseBannerQuickAdapter<T> extends BaseBannerAdapter<T, BaseBannerViewHolder<T>> {
-    /**
-     * 默认没有LayoutId 使用
-     */
-    protected final int NO_LAYOUT = -1;
-
-    @Override
-    protected void onBind(BaseBannerViewHolder<T> holder, T data, int position, int pageSize) {
-        convert(holder, data, position, pageSize);
-    }
-
-    @Override
-    public BaseBannerViewHolder<T> createViewHolder(@NonNull ViewGroup parent, View itemView, int viewType) {
-        return new BaseBannerViewHolder<T>(itemView);
-    }
-
-    /**
-     * 进行数据适配
-     * @param holder 基础ViewHolder
-     * @param data 数据
-     * @param position 位置
-     * @param pageSize 页面个数
-     */
-    protected abstract void convert(BaseBannerViewHolder<T> holder, T data, int position, int pageSize);
-
-    /**
-     * 如果使用的是布局id 重写此方法;
-     * 如果使用ViewBinding 重写  createViewBinding(ViewGroup, int);此方法不需要重写
-     */
-    @Override
-    public int getLayoutId(int viewType) {
-        return NO_LAYOUT;
-    }
-
-}

+ 0 - 23
bannerview/src/main/java/com/zhpan/bannerview/BaseBannerViewHolder.java

@@ -1,23 +0,0 @@
-package com.zhpan.bannerview;
-
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-/**
- * @author DBoy
- * @date 2020/12/11
- * Class 描述 : 不做任何操作
- */
-public class BaseBannerViewHolder<T> extends BaseViewHolder<T> {
-
-
-    public BaseBannerViewHolder(@NonNull View itemView) {
-        super(itemView);
-    }
-
-    @Override
-    public void bindData(T data, int position, int pageSize) {
-
-    }
-}

+ 19 - 0
bannerview/src/main/java/com/zhpan/bannerview/BaseSimpleAdapter.java

@@ -0,0 +1,19 @@
+package com.zhpan.bannerview;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+
+/**
+ * @author DBoy
+ * @date 2020/12/11
+ * Description : A simple and easy to use adapter for BVP,
+ * only single view type supported with this adapter.
+ */
+public abstract class BaseSimpleAdapter<T> extends BaseBannerAdapter<T, BaseViewHolder<T>> {
+    @Override
+    public BaseViewHolder<T> createViewHolder(@NonNull ViewGroup parent, View itemView, int viewType) {
+        return new BaseViewHolder<>(itemView);
+    }
+}

+ 8 - 3
bannerview/src/main/java/com/zhpan/bannerview/BaseViewHolder.java

@@ -20,7 +20,7 @@ import androidx.recyclerview.widget.RecyclerView;
  * </pre>
  */
 @SuppressWarnings("unused")
-public abstract class BaseViewHolder<T> extends RecyclerView.ViewHolder {
+public class BaseViewHolder<T> extends RecyclerView.ViewHolder {
 
     private final SparseArray<View> mViews = new SparseArray<>();
 
@@ -28,10 +28,15 @@ public abstract class BaseViewHolder<T> extends RecyclerView.ViewHolder {
         super(itemView);
     }
 
-    public abstract void bindData(T data, int position, int pageSize);
+    /**
+     * @deprecated bind data in adapter please.
+     */
+    @Deprecated
+    public void bindData(T data, int position, int pageSize){
+    }
 
     @SuppressWarnings("unchecked")
-    public  <V extends View> V findView(int viewId) {
+    public <V extends View> V findView(int viewId) {
         View view = mViews.get(viewId);
         if (view == null) {
             view = itemView.findViewById(viewId);