Android实现的RecyclerView适配器
这个适配器我珍藏已久(近两年),不断看到别人发适配器相关的文章,但我总觉得没我的好用,所以今日拿出来分享(宣传)一下,欢迎各位指正不足.
源码地址:GitHub
功能
- 无需继承Adapter,无需判断item类型.
- 支持页头和页脚.
- 支持自动展示空数据界面.
- 通过Kotlin的lambda大量缩减代码.
- 支持全局Item类型
- 支持diff刷新
使用
添加依赖
implementation"com.dengzii.adapter:$latestVersion"
通过lambda快速使用,这里就快速绑定了四种item的布局.
adapter.setEnableEmptyView(true,SuperAdapter.Empty()) adapter.addViewHolderForType(R.layout.item_empty){ onBindData{_,_-> findView (R.id.bt_refresh).setOnClickListener{ //refreshyourdata } } } adapter.setHeader("Thisisheader",R.layout.item_header){ onBindData{data,_-> findView (R.id.tv_title).text=data } } adapter.setFooter(listOf("This","is","footer"),R.layout.item_section){ onBindData{data,_-> findView (R.id.tv_title).text=data.joinToString("") } } adapter.addViewHolderForType (R.layout.item_header){ valtitle=findView (R.id.tv_title) valcontentbylazyFindView (R.id.tv_content) onBindData{data,_-> title.text=data.title content.text=data.content } }
或者不使用lambda
valadapter=SuperAdapter(listOf("Item1","Item2","Item3")) adapter.addViewHolderForType(String::class.java,ItemViewHolder::class.java) recyclerView.layoutManager=LinearLayoutManager(this) recyclerView.adapter=adapter classItemViewHolder(parent:ViewGroup):AbsViewHolder(parent){ privatelateinitvarmTextView:TextView overridefunonCreate(parent:ViewGroup){ mTextView=TextView(context) mTextView.layoutParams=getLayoutParam( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ) setContentView(mTextView) } overridefunonBindData(data:String,position:Int){ mTextView.text=data } }
无需继承SuperAdapter,但需要为每种Item实现并继承继承抽象类AbsViewHolder,并在改类中设置布局和绑定View,数据.
AbsViewHolder代表一种Item类型,其中泛型T为该Item对应的实体类
类SuperAdapter的作用
Adapter构造器
publicSuperAdapter(List
绑定ViewHolder到实体类型
publicvoidaddViewHolderForType(Class>type,Classholder)
设置Item点击事件
publicvoidsetOnItemClickListener(OnItemClickListenerlistener) publicinterfaceOnItemClickListener{ voidonItemClick(Viewv,ObjectitemData,intposition); }
类AbsViewHolder的作用
每个AbsViewHolder表示一种item类型.
构造器,必须重写带参数构造器,否则无法使用,parent与Adapter#onCreateViewHolder中parent一致
publicAbsViewHolder(@NonNullViewGroupparent)
创建Item时调用onCreate方法,其中parent是该item的容器布局
publicabstractvoidonCreate(@NonNullViewGroupparent);
绑定数据
publicabstractvoidonBindData(@NonNullTdata,intposition);
Sample
设置Adapter
vardata:List... valadapter=SuperAdapter(data) //绑定数据类到ViewHolder adapter.addViewHolderForType(Item::class.java,ItemViewHolder::class.java) adapter.addViewHolderForType(Header::class.java,HeaderViewHolder::class.java) adapter.addViewHolderForType(Section::class.java,SectionViewHolder::class.java) adapter.setOnItemClickListener(object:SuperAdapter.OnItemClickListener{ overridefunonItemClick(v:View?,itemData:Any?,position:Int){ } }) recyclerView.layoutManager=LinearLayoutManager(this) recyclerView.adapter=adapter
继承AbsViewHolder
classItemViewHolder(parent:ViewGroup):AbsViewHolder- (parent){ privatelateinitvarmTvTitle:TextView privatelateinitvarmTvContent:TextView privatelateinitvarmIvImage:ImageView overridefunonCreate(parent:ViewGroup){ setContentView(R.layout.item_item) mTvTitle=findViewById(R.id.tv_title) mTvContent=findViewById(R.id.tv_content) mIvImage=findViewById(R.id.iv_img) } overridefunonBindData(data:Item,position:Int){ mTvTitle.text=data.title mTvContent.text=data.content mIvImage.setImageResource(data.img) } }
以上就是Android实现的RecyclerView适配器的详细内容,更多关于RecyclerView适配器的资料请关注毛票票其它相关文章!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。