引用:
implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.2"
BaseQuickAdapter
基本使用:
-
快速使用
class TestAdapter : BaseQuickAdapter<Status, TestAdapter.VH>() {// 自定义ViewHolder类class VH(parent: ViewGroup,val binding: LayoutAnimationBinding = LayoutAnimationBinding.inflate(LayoutInflater.from(parent.context), parent, false),) : RecyclerView.ViewHolder(binding.root)override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): VH {// 返回一个 ViewHolderreturn VH(parent)}override fun onBindViewHolder(holder: VH, position: Int, item: Status?) {// 设置item数据}}
-
如果Adapter特别简单,可以使用BuickViewHolder
class TestAdapter : BaseQuickAdapter<Status, QuickViewHolder>() {override fun onCreateViewHolder(context: Context, parent: ViewGroup, viewType: Int): QuickViewHolder {// 返回一个 ViewHolderreturn QuickViewHolder(R.layout.layout_animation, parent)}override fun onBindViewHolder(holder: QuickViewHolder, position: Int, item: Status?) {// 设置item数据holder.getView(R.id.xxxx)}}
点击事件:
-
item 点击事件
adapter.setOnItemClickListener { adapter, view, position ->Tips.show("onItemClick $position") }
-
item 长按事件
adapter.setOnItemLongClickListener { adapter, view, position ->Tips.show("onItemLongClick $position")true }
-
item 子控件点击事件
// 需要传递控件 id adapter.addOnItemChildClickListener(R.id.iv_num_add) { adapter, view, position ->Tips.show("onItemChildClick: add $position") }
-
item 子控件长按事件
// 需要传递控件 id adapter.addOnItemChildLongClickListener(R.id.btn_long) { adapter, view, position ->Tips.show("onItemChildLongClick $position")true }
点击事件(扩展)
-
去除点击抖动(双击)的点击方法。 默认500毫秒间隔,可以传递参数修改。
// item 去除点击抖动的扩展方法adapter.setOnDebouncedItemClick { adapter, view, position ->}// item Child 去除点击抖动的扩展方法adapter.addOnDebouncedChildClick { adapter, view, position ->}
数据操作
-
设置数据集合
adapter.submitList(list)
-
修改某一位置的数据
//修改index为1处的数据 adapter[1] = data
-
新增数据
// 尾部新增数据 adapter.add(data)// 在指定位置添加一条新数据 adapter.add(1, data)// 添加数据集 adapter.addAll(list)// 指定位置添加数据集 adapter.addAll(1, list)
-
删除数据
// 删除数据 adapter.remove(data)// 删除指定位置数据 adapter.removeAt(1)
-
交换数据位置(仅仅是这两个数据的位置交换)
// 交换两个位置的数据 adapter.swap(1, 3)
-
移动数据位置(注意和 swap 的区别)
// 交换两个位置的数据 adapter.move(1, 3)
-
获取Item数据的索引
// 如果返回 -1,表示不存在 adapter.itemIndexOfFirst(data)
-
根据索引,获取Item数据
// 如果返回 null,表示没有数据 adapter.getItem(1)
动画
-
内部内置了5种默认动画:
/** * BaseQuickAdapter.AnimationType.AlphaIn * BaseQuickAdapter.AnimationType.ScaleIn * BaseQuickAdapter.AnimationType.SlideInBottom * BaseQuickAdapter.AnimationType.SlideInLeft * BaseQuickAdapter.AnimationType.SlideInRight */ adapter.setItemAnimation(BaseQuickAdapter.AnimationType.AlphaIn)
-
自定义动画 需继承
ItemAnimator
实现自定义动画class CustomAnimation1 : ItemAnimator {override fun animator(view: View): Animator {// 创建三个动画val alpha: Animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f)val scaleY: Animator = ObjectAnimator.ofFloat(view, "scaleY", 1.3f, 1f)val scaleX: Animator = ObjectAnimator.ofFloat(view, "scaleX", 1.3f, 1f)scaleY.interpolator = DecelerateInterpolator()scaleX.interpolator = DecelerateInterpolator()// 多个动画组合,可以使用 AnimatorSet 包装val animatorSet = AnimatorSet()animatorSet.duration = 350animatorSet.play(alpha).with(scaleX).with(scaleY)return animatorSet} }// 设置动画 adapter.itemAnimation = CustomAnimation1()
-
重写动画执行操作
class TestAdapter : BaseQuickAdapter<Status, QuickViewHolder>() {...override fun startItemAnimator(anim: Animator, holder: RecyclerView.ViewHolder) {} }
-
是否打开动画
adapter.animationEnable = true
更多Adapter
更多Adapter
项目地址