RegisterAdapter 使用说明
使用方式
1.导入jitpack
maven { url 'https://jitpack.io' }
2.gradle 导入
implementation 'com.gitee.aracoix:register-adapter:1.0.3'
声明adapter
val adapter = RegisterAdapter()
3.Gradle中开启viewbinding 或者 databinding
低版本gradle
dataBinding {
enabled = true
}
viewBinding {
enabled = true
}
高版本gradle
buildFeatures{
viewBinding = true
dataBinding = true
}
使用dataBinding 需要'kotlin-kapt' 支持
3.写一个布局
item_loading_view_holder.xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:background="@color/white">
<ImageView
android:id="@+id/progress"
android:layout_width="72dp"
android:layout_height="27dp"
android:layout_centerInParent="true"
android:src="@drawable/anim_loading" />
</RelativeLayout>
4.开始写viewholder
LoadingViewHolder.kt
class LoadingBean
class LoadingViewHolder(override val mBinding: ItemLoadingViewHolderBinding)
:BaseRegisterViewHolder<LoadingBean, ItemLoadingViewHolderBinding>(mBinding) {
override fun bindData(data: LoadingBean, payloads: List<Any>) {
(mBinding.progress.drawable as AnimationDrawable).start()
}
}
FooterViewHolder.kt
data class FooterBean(val desc: Int = R.string.common_list_no_more, val height: Int = 40.dp)
class FooterViewHolder(override val mBinding: ItemFooterViewHolderBinding) :
BaseRegisterViewHolder<FooterBean, ItemFooterViewHolderBinding>(mBinding) {
override fun bindData(data: FooterBean, payloads: List<Any>) {
mBinding.loadingEndText.setText(data.desc)
val layoutParams = mBinding.llFooter.layoutParams
layoutParams.height = data.height
mBinding.llFooter.layoutParams = layoutParams
addMultiClickListener(mBinding.root)
}
}
5.绑定adapter,注意holder注册时 按照 bean+binding 为key,如果相同的话只有后注册的生效
recyclerView.layoutManager = LinearLayoutManager(requireContext())
adapter.register(LoadingViewHolder::class.java)
adapter.register(FooterViewHolder::class.java)
//一对多注册
adapter.multiRegister(object : MultiRegister<Bean>() {
override fun pickItem(position:Int,data: Bean): RegisterItem {
return when (data.type) {
1 -> RegisterItem(ViewHolderA::class.java)
else -> RegisterItem(ViewHolderB::class.java)
}
}
})
adapter.registerTo(recyclerView)
adapter.loadData(LoadingBean())
adapter.loadData((0..100).map{Bean()})
adapter.loadData(FooterBean())
删除全部数据
adapter.removeAllData()
移除某个数据
adapter.removeData(data)
adapter.removeData(index)
另外可 将viewholder 添加到viewgroup 上使用
LoadingViewHolder::class.holder2View(viewgroup,LoadingBean())