implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.2"
快速使用
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 {
// 返回一个 ViewHolder
return 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 {
// 返回一个 ViewHolder
return 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 = 350
animatorSet.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