Browse Source

For #300, Opt the example code of ViewBinding and DataBinding

zhpanvip 2 years ago
parent
commit
2e9b9c2e5c

+ 35 - 21
app/src/main/java/com/example/zhpan/banner/adapter/DataBindingSampleAdapter.kt

@@ -1,32 +1,46 @@
-package com.example.zhpan.banner.adapter;
+package com.example.zhpan.banner.adapter
 
-import androidx.databinding.DataBindingUtil;
-
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.databinding.ItemSlideModelDataBindingBinding;
-import com.example.zhpan.banner.net.BannerData;
-import com.zhpan.bannerview.BaseBannerAdapter;
-import com.zhpan.bannerview.BaseViewHolder;
+import android.view.View
+import android.view.ViewGroup
+import com.zhpan.bannerview.BaseBannerAdapter
+import com.example.zhpan.banner.net.BannerData
+import androidx.databinding.DataBindingUtil
+import com.example.zhpan.banner.R.layout
+import com.example.zhpan.banner.databinding.ItemSlideModelDataBindingBinding
+import com.zhpan.bannerview.BaseViewHolder
+import java.lang.NullPointerException
 
 /**
  * <pre>
- *   Created by zhpan on 2020/4/5.
- *   Description:使用DataBinding示例
- * </pre>
+ * Created by zhpan on 2020/4/5.
+ * Description:使用DataBinding示例
+</pre> *
  */
-public class DataBindingSampleAdapter extends BaseBannerAdapter<BannerData> {
+class DataBindingSampleAdapter : BaseBannerAdapter<BannerData?>() {
+
+  override fun createViewHolder(
+    parent: ViewGroup, itemView: View,
+    viewType: Int
+  ): BaseViewHolder<BannerData?> {
+    val binding = DataBindingUtil.bind<ItemSlideModelDataBindingBinding>(itemView)
+      ?: throw NullPointerException("binding is Null")
+    return DataBindingViewHolder(binding)
+  }
 
-  @Override
-  protected void bindData(BaseViewHolder<BannerData> holder, BannerData data, int position,
-      int pageSize) {
-    ItemSlideModelDataBindingBinding dataBinding = DataBindingUtil.bind(holder.itemView);
-    if (dataBinding != null) {
-      dataBinding.setBannerData(data);
+  override fun bindData(
+    holder: BaseViewHolder<BannerData?>?,
+    data: BannerData?,
+    position: Int,
+    pageSize: Int
+  ) {
+    if (holder is DataBindingViewHolder) {
+      holder.binding.bannerData = data
     }
   }
 
-  @Override
-  public int getLayoutId(int viewType) {
-    return R.layout.item_slide_model_data_binding;
+  override fun getLayoutId(viewType: Int): Int {
+    return layout.item_slide_model_data_binding
   }
 }
+
+internal class DataBindingViewHolder(var binding: ItemSlideModelDataBindingBinding) : BaseViewHolder<BannerData?>(binding.root)

+ 24 - 20
app/src/main/java/com/example/zhpan/banner/adapter/ViewBindingSampleAdapter.kt

@@ -1,35 +1,39 @@
-package com.example.zhpan.banner.adapter;
+package com.example.zhpan.banner.adapter
 
-import com.example.zhpan.banner.R;
-import com.example.zhpan.banner.databinding.ItemSlideModeBinding;
-import com.zhpan.bannerview.BaseBannerAdapter;
-import com.zhpan.bannerview.BaseViewHolder;
+import android.view.View
+import android.view.ViewGroup
+import com.example.zhpan.banner.R.layout
+import com.example.zhpan.banner.databinding.ItemSlideModeBinding
+import com.zhpan.bannerview.BaseBannerAdapter
+import com.zhpan.bannerview.BaseViewHolder
 
 /**
  * @author DBoy
  * @date 2020/12/11
  * Class 描述 : 使用ViewBinding示例
  */
-public class ViewBindingSampleAdapter extends BaseBannerAdapter<Integer> {
+class ViewBindingSampleAdapter(private val mRoundCorner: Int) : BaseBannerAdapter<Int>() {
 
-  private final int mRoundCorner;
-
-  public ViewBindingSampleAdapter(int roundCorner) {
-    mRoundCorner = roundCorner;
+  override fun createViewHolder(
+    parent: ViewGroup,
+    itemView: View,
+    viewType: Int
+  ): BaseViewHolder<Int> {
+    return ViewBindingViewHolder(ItemSlideModeBinding.bind(itemView))
   }
 
-  @Override
-  protected void bindData(BaseViewHolder<Integer> holder, Integer data, int position,
-      int pageSize) {
-    //示例使用ViewBinding
-    ItemSlideModeBinding viewBinding = ItemSlideModeBinding.bind(holder.itemView);
-    viewBinding.bannerImage.setRoundCorner(mRoundCorner);
-    viewBinding.bannerImage.setImageResource(data);
+  override fun bindData(holder: BaseViewHolder<Int>, data: Int, position: Int, pageSize: Int) {
+    if (holder is ViewBindingViewHolder) {
+      holder.viewBinding.bannerImage.setRoundCorner(mRoundCorner)
+      holder.viewBinding.bannerImage.setImageResource(data)
+    }
   }
 
-  @Override
-  public int getLayoutId(int viewType) {
-    return R.layout.item_slide_mode;
+  override fun getLayoutId(viewType: Int): Int {
+    return layout.item_slide_mode
   }
 }
 
+internal class ViewBindingViewHolder(var viewBinding: ItemSlideModeBinding) :
+  BaseViewHolder<Int>(viewBinding.root)
+

+ 1 - 4
app/src/main/java/com/example/zhpan/banner/view/CornerImageView.kt

@@ -1,7 +1,6 @@
 package com.example.zhpan.banner.view
 
 import android.content.Context
-import android.os.Build
 import android.util.AttributeSet
 
 import androidx.appcompat.widget.AppCompatImageView
@@ -14,8 +13,6 @@ class CornerImageView @JvmOverloads constructor(
 ) : AppCompatImageView(context, attrs, defStyleAttr) {
 
   fun setRoundCorner(radius: Int) {
-    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
-      ViewStyleSetter.applyRoundCorner(this, radius.toFloat())
-    }
+    ViewStyleSetter.applyRoundCorner(this, radius.toFloat())
   }
 }