Android 万能的RecyclerView适配器(BaseRecyclerViewAdapterHelper)
2023-12-27 18:47:26
引用:
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 { // 返回一个 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
更多Adapter
更多Adapter
?
文章来源:https://blog.csdn.net/pengguichu/article/details/135249720
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!