电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Android實(shí)現(xiàn)的RecyclerView適配器

瀏覽:90日期:2022-09-20 16:41:35

這個(gè)適配器我珍藏已久(近兩年), 不斷看到別人發(fā)適配器相關(guān)的文章, 但我總覺得沒我的好用, 所以今日拿出來分享(宣傳)一下, 歡迎各位指正不足.

源碼地址: GitHub

功能 無需繼承 Adapter, 無需判斷 item 類型. 支持頁頭和頁腳. 支持自動展示空數(shù)據(jù)界面. 通過 Kotlin 的 lambda 大量縮減代碼. 支持全局 Item 類型 支持 diff 刷新 使用

添加依賴

implementation 'com.dengzii.adapter:$latestVersion'

通過 lambda 快速使用, 這里就快速綁定了四種 item 的布局.

adapter.setEnableEmptyView(true, SuperAdapter.Empty())adapter.addViewHolderForType<SuperAdapter.Empty>(R.layout.item_empty){ onBindData { _, _ -> findView<View>(R.id.bt_refresh).setOnClickListener { // refresh your data } }}adapter.setHeader('This is header', R.layout.item_header) { onBindData { data, _ -> findView<TextView>(R.id.tv_title).text = data }}adapter.setFooter(listOf('This', 'is', 'footer'), R.layout.item_section) { onBindData { data, _ -> findView<TextView>(R.id.tv_title).text = data.joinToString(' ') }}adapter.addViewHolderForType<Header>(R.layout.item_header) { val title = findView<TextView>(R.id.tv_title) val content by lazyFindView<TextView>(R.id.tv_content) onBindData { data, _ -> title.text = data.title content.text = data.content }}

或者不使用 lambda

val adapter = SuperAdapter(listOf('Item 1', 'Item 2', 'Item 3'))adapter.addViewHolderForType(String::class.java, ItemViewHolder::class.java)recyclerView.layoutManager = LinearLayoutManager(this)recyclerView.adapter = adapterclass ItemViewHolder(parent: ViewGroup) : AbsViewHolder<String>(parent) { private lateinit var mTextView:TextView override fun onCreate(parent: ViewGroup) { mTextView = TextView(context) mTextView.layoutParams = getLayoutParam( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT ) setContentView(mTextView) } override fun onBindData(data: String, position: Int) { mTextView.text = data }}

無需繼承 SuperAdapter, 但需要為每種 Item 實(shí)現(xiàn)并繼承繼承抽象類 AbsViewHolder, 并在改類中設(shè)置布局和綁定 View, 數(shù)據(jù).

AbsViewHolder 代表一種 Item 類型, 其中泛型 T 為該 Item 對應(yīng)的實(shí)體類

類 SuperAdapter 的作用

Adapter 構(gòu)造器

public SuperAdapter(List<Object> data)

綁定 ViewHolder 到實(shí)體類型

public void addViewHolderForType(Class<?> type, Class<? extends AbsViewHolder> holder)

設(shè)置 Item 點(diǎn)擊事件

public void setOnItemClickListener(OnItemClickListener listener) public interface OnItemClickListener{ void onItemClick(View v, Object itemData, int position); }類 AbsViewHolder 的作用

每個(gè) AbsViewHolder 表示一種 item 類型.

構(gòu)造器, 必須重寫帶參數(shù)構(gòu)造器, 否則無法使用, parent 與 Adapter#onCreateViewHolder 中 parent 一致

public AbsViewHolder(@NonNull ViewGroup parent)

創(chuàng)建 Item 時(shí)調(diào)用 onCreate 方法, 其中 parent 是該 item 的容器布局

public abstract void onCreate(@NonNull ViewGroup parent);

綁定數(shù)據(jù)

public abstract void onBindData(@NonNull T data, int position); Sample

設(shè)置 Adapter

var data:List<Any>...val adapter = SuperAdapter(data)// 綁定數(shù)據(jù)類到 ViewHolderadapter.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 { override fun onItemClick(v: View?, itemData: Any?, position: Int) { }})recyclerView.layoutManager = LinearLayoutManager(this)recyclerView.adapter = adapter

繼承 AbsViewHolder

class ItemViewHolder(parent: ViewGroup) : AbsViewHolder<Item>(parent) { private lateinit var mTvTitle: TextView private lateinit var mTvContent: TextView private lateinit var mIvImage:ImageView override fun onCreate(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) } override fun onBindData(data: Item, position: Int) { mTvTitle.text = data.title mTvContent.text = data.content mIvImage.setImageResource(data.img) }}

以上就是Android實(shí)現(xiàn)的RecyclerView適配器的詳細(xì)內(nèi)容,更多關(guān)于RecyclerView 適配器的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 东莞注册公司-代办营业执照-东莞公司注册代理记账-极刻财税 | 氧化锆陶瓷_氧化锆陶瓷加工_氧化锆陶瓷生产厂家-康柏工业陶瓷有限公司 | 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 焦作网 WWW.JZRB.COM | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 等离子空气净化器_医用空气消毒机_空气净化消毒机_中央家用新风系统厂家_利安达官网 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | 高速龙门架厂家_监控杆_多功能灯杆_信号灯杆_锂电池太阳能路灯-鑫世源照明 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 北京发电机出租_发电机租赁_北京发电机维修 - 河北腾伦发电机出租 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 海峰资讯 - 专注装饰公司营销型网站建设和网络营销培训 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 微量水分测定仪_厂家_卡尔费休微量水分测定仪-淄博库仑 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 成都租车_成都租车公司_成都租车网_众行宝 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | 硫酸钡厂家_高光沉淀硫酸钡价格-河南钡丰化工有限公司 | app开发|app开发公司|小程序开发|物联网开发||北京网站制作|--前潮网络 | 自清洗过滤器_全自动过滤器_全自动反冲洗过滤器_量子过滤器-滑漮滴 | 网站制作优化_网站SEO推广解决方案-无锡首宸信息科技公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 基业箱_环网柜_配电柜厂家_开关柜厂家_开关断路器-东莞基业电气设备有限公司 | ◆大型吹塑加工|吹塑加工|吹塑代加工|吹塑加工厂|吹塑设备|滚塑加工|滚塑代加工-莱力奇塑业有限公司 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 |