kotlin中RecyclerView.Adapter通用适配器
文章目录
- 结合databinding,livedata
- BaseViewHolder
- BaseAdapter
- recycleView通用adapter
- 使用
- 数据bean
- ViewModel
- 绑定item_layout布局
- activity中使用
结合databinding,livedata
- 相关依赖
implementation "androidx.lifecycle:lifecycle-extensions:2.1.0"implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.1.0"
BaseViewHolder
package com.beans.base.recycleimport androidx.databinding.ViewDataBinding
import androidx.recyclerview.widget.RecyclerView/*** @Author yangtianfu* @CreateTime 2020/4/2 16:56* @Describe recycleView封装ViewHolder*/
open class BaseViewHolder(var dataBinding: ViewDataBinding):RecyclerView.ViewHolder(dataBinding.root) {
}
BaseAdapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.RecyclerView/*** @Author yangtianfu* @CreateTime 2020/4/2 16:50* @Describe recycleView统配adapter*/
abstract class BaseAdapter<T>(var data: List<T> = listOf()):RecyclerView.Adapter<BaseViewHolder>() {override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder{return BaseViewHolder(DataBindingUtil.inflate(LayoutInflater.from(parent?.context), viewType, parent, false))}override fun getItemCount(): Int {return data.size}fun refreshData(newData: List<T>) {this.data = newDatathis.notifyDataSetChanged()}
// 增加点击和长按事件interface OnItemClickListener {fun onItemClick(view: View, position: Int)
// fun onItemLongClick(view: View,position: Int): Boolean}}
recycleView通用adapter
package com.beans.server.ui.adapterimport androidx.databinding.ViewDataBinding
import com.aquila.lib.logE
import com.beans.base.recycle.BaseAdapter
import com.beans.base.recycle.BaseViewHolder
import com.beans.server.R
import com.beans.server.BR
import com.beans.server.bean.OwnerManualBean/*** @Author yangtianfu* @CreateTime 2020/4/2 16:59* @Describe recycleView通用adapter*/
class MyAdapter<T> constructor(layout:Int) : BaseAdapter<T>() {var layout:Int = layout //代替下方init方法 constructor(layout:Int)为主构造函数// init {
// 主构造函数执行后执行
// this.layout = layout
// }private lateinit var onItemClickListener: OnItemClickListenerfun setOnItemClickListener(listener: OnItemClickListener) {this.onItemClickListener = listener}override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {var binding : ViewDataBinding = holder.dataBindingbinding.setVariable(BR.myData,data.get(position))holder.itemView.setOnClickListener {onItemClickListener.onItemClick(holder.itemView,position)}}override fun getItemViewType(position: Int): Int {return this.layout
// return R.layout.server_owner_dash_board_item}
}
使用
数据bean
import java.io.Serializableopen class BaseDto:Serializable {
}
import com.beans.base.bean.BaseDto/*** @Author yangtianfu* @CreateTime 2020/4/2 16:43* @Describe */
data class OwnerBean(var name:String?,var img:Int?
):BaseDto()
ViewModel
//此处封装与网络请求相关,暂时不用
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.beans.base.net.NetServiceopen class BaseModel : ViewModel() {lateinit var owner: LifecycleOwner//网络请求状态数据,页面中可以监听这个数据完成状态的切换,空页面,loading 重试等等var status: MutableLiveData<Int> = MutableLiveData()protected fun <T> getService(c: Class<T>): T = NetService.getRetrofitService(c)//访问老接口protected fun <T> getOldService(c: Class<T>): T = NetService.getOldRetrofitService(c)}
import androidx.lifecycle.MutableLiveData
import com.beans.server.R
import com.beans.server.bean.OwnerDashBoardBean
import com.beans.server.bean.OwnerManualBean
import com.mobile.base.BaseModel/*** @Author yangtianfu* @CreateTime 2020/4/2 15:23* @Describe 通配相关vm,用于获取数据并将数据赋值给livedata用于监听数据改变通知UI进行更新 ,暂时与网络请求无关,所以不继承BaseModel而是继承ViewModel*/
class OwnerManualModel :ViewModel(){//手册详情数据var listDashBoards = MutableLiveData<List<OwnerDashBoardBean>>()//仪表盘数据var listManuals = MutableLiveData<List<OwnerManualBean>>()//获取手册集fun getDashBoardData(){var data = listOf(OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board),OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board),OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board),OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board),OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board),OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board),OwnerDashBoardBean("转向指示灯","转向灯工作时,相应的转向指示灯闪烁。按下危险警告按钮时,转向指示灯及车外所有的转向灯将一起闪烁",R.mipmap.server_dash_board))listDashBoards.value = data}//获取手册集fun getManualsData(){var data = listOf(OwnerManualBean("仪表盘",R.mipmap.server_dash_board),OwnerManualBean("车型说明",R.mipmap.server_dash_board),OwnerManualBean("书签",R.mipmap.server_book_mark),OwnerManualBean("快速入门",R.mipmap.server_dash_board))listManuals.value = data}
}
绑定item_layout布局
<?xml version="1.0" encoding="utf-8"?><layout><data><import type="com.beans.server.bean.OwnerManualBean"></import><import type="com.beans.server.R"></import><variablename="myData"type="OwnerlBean" /><variablename="listener"type="android.view.View.OnClickListener" /></data><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="112dp"android:gravity="center_vertical"android:background="@color/white"><ImageViewandroid:id="@+id/iv_manual"android:layout_width="80dp"android:layout_height="match_parent"android:src="@{myData.img}"android:layout_marginLeft="16dp"android:scaleType="centerInside"></ImageView><TextViewandroid:id="@+id/tv_manual"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginLeft="12dp"android:text="@{myData.name}"android:gravity="center_vertical"android:textColor="@color/text_item_center_color"android:textSize="14sp"android:layout_toRightOf="@id/iv_manual"></TextView><ImageViewandroid:id="@+id/iv_into"android:layout_width="24dp"android:layout_height="match_parent"android:src="@mipmap/right_into_icon"android:scaleType="center"android:layout_marginRight="16dp"android:layout_alignParentRight="true"></ImageView><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginLeft="108dp"android:layout_alignParentBottom="true"android:background="@color/color_divide_line"></View></RelativeLayout></layout>
activity中使用
lateinit var ownerManualModel:OwnerManualModelprivate var mAdapter : MyAdapter<OwnerBean>? =null、、、ownerManualModel = ViewModelProviders.of(this).get(OwnerManualModel::class.java)ownerManualModel.getManualsData()val layoutManager = LinearLayoutManager(this)mBinding.recyclerManual.layoutManager = layoutManagermAdapter = MyAdapter(R.layout.server_owner_manule_item)mBinding.recyclerManual.adapter = mAdaptermAdapter?.setOnItemClickListener(object : BaseAdapter.OnItemClickListener {override fun onItemClick(view: View, position: Int) {ToastUtils.s(this@ServerOwnerManualActivity,"点击 ${position}")}})ownerManualModel.listManuals.observe(this,Observer {//此处更新UI,将数据赋值并更新adaptermAdapter!!.refreshData(it)mAdapter?.notifyDataSetChanged()})
kotlin中RecyclerView.Adapter通用适配器相关推荐
- RecyclerView.Adapter通用基类
RecyclerView.Adapter通用基类 一般来说,我们在使用RecyclerView的时候,需要自定义一个Adapter,用来适配RecyclerView和data.这里主要来编写这个Ada ...
- Android RecyclerView简单通用适配器
一直都想写一个通用的RecyclerView适配器,但是一直都无从下手,后来看了鸿洋大神的博客后才知道怎么写,并且在此基础上添加了点自己的东西,终于算是大功告成.先上代码看看 public class ...
- 一个适用于ListView/GridView/RecyclerView的通用适配器
简化大量重复代码 支持多布局 自定义图片加载 常用数据操作 view复用 RecyclerView item 点击和长按事件 GitHub源码地址 简书地址 gradle依赖 dependencies ...
- basequickadapter详解_在kotlin中如何使用BaseQuickAdapter适配器
为了更好的进行理解先来对比下 Java代码 public class WithdrawRecordAdapter2 extends BaseQuickAdapter { public Withdraw ...
- Kotlin ListView设置Adapter
直接上代码. 1.附上Activity代码 package com.example.chehang168.kotlindemoimport android.view.View import andro ...
- Kotlin中常用集合的使用
集合在程序中的比例的很重的,Kotlin针对集合进行了更加简洁和有效的封装,这边文章就简单的介绍一下list,map,set这三个最常用集合的使用. 首先在Kotlin中,明确区分了集合的只读和可变. ...
- Android适配器以及作用,Android RecyclerView 通用适配器的实现
分析 我们需要在RecyclerViewAdapter内部维持一个数据集合的引用 需要实现Item的点击事件,包括短按和长按,并需要向外部提供设置监听器的方法 这个适配器必须通用,所以应该是泛型的,并 ...
- Android中使用Adapter(适配器)给RecycleView设置数据源
场景 RecyclerView RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足.其可以实现数据纵向滚动,也 ...
- Android RecyclerView设计通用Adapter
RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...
最新文章
- 浏览器兼容性--IE11以及Edge等下载文件的中文名出现乱码,前后端解决方案
- PS如何批量生成缩略图(方法可以通用其他重复劳动)
- 360导航源码php,114啦网址导航源码仿360网址导航最新版
- 《移动优先与响应式Web设计》一上册 移动优先
- 我们又来送书啦!这一次,用做业务的思维讲推荐系统 | 文末福利
- 多个iframe同时加载并动态调整大小
- 设计方案,拿来吧你!
- 前端开发 个人简历的制作 0228
- C语言---关于关键字const与static的简单理解
- C语言-Ubuntu下GDB与GCC的安装与使用
- JAVA_返回一个数值的相反数的几种方式.
- ajax用get刷新页面元素在IE下无效解决~~
- 文本关键词提取算法总结
- 计算机网络自顶向下方法 第四章 作业习题答案
- Python基础之文件和数据格式化
- [中医经络学习一]足阳明胃经
- cdrom是多媒体微型计算机,2011年计算机一级考试理论试题:多媒体
- 【计算机视觉40例】案例10:隐身术
- Wireshark实验——了解PDU
- Clickhouse 字符串函数
热门文章
- 原生爬取熊猫平台的数据
- 虚拟试衣镜 疫情期间实体服装店的救世主还是理想丰满现实骨感的“拔草神器”?
- 使用占位符预防SQL注入的原理
- BZOJ 4811([Ynoi2017]由乃的OJ-树链剖分)
- k均值聚类算法考试例题_K-均值法计算示例(示例)
- RF自动化-RIDE(跑自动化注意事项)和(配置环境注意事项)
- 智能存储 | 视频 DNA ,独一无二的安全标识
- 【mysql】phpstudy8打开MySQL命令行的方法
- css改变鼠标图片大小,CSS实现鼠标经过图片上图片等比缩放效果(代码实例)
- starGan-v2论文复现-代码完整