文章目录

  • 结合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通用适配器相关推荐

  1. RecyclerView.Adapter通用基类

    RecyclerView.Adapter通用基类 一般来说,我们在使用RecyclerView的时候,需要自定义一个Adapter,用来适配RecyclerView和data.这里主要来编写这个Ada ...

  2. Android RecyclerView简单通用适配器

    一直都想写一个通用的RecyclerView适配器,但是一直都无从下手,后来看了鸿洋大神的博客后才知道怎么写,并且在此基础上添加了点自己的东西,终于算是大功告成.先上代码看看 public class ...

  3. 一个适用于ListView/GridView/RecyclerView的通用适配器

    简化大量重复代码 支持多布局 自定义图片加载 常用数据操作 view复用 RecyclerView item 点击和长按事件 GitHub源码地址 简书地址 gradle依赖 dependencies ...

  4. basequickadapter详解_在kotlin中如何使用BaseQuickAdapter适配器

    为了更好的进行理解先来对比下 Java代码 public class WithdrawRecordAdapter2 extends BaseQuickAdapter { public Withdraw ...

  5. Kotlin ListView设置Adapter

    直接上代码. 1.附上Activity代码 package com.example.chehang168.kotlindemoimport android.view.View import andro ...

  6. Kotlin中常用集合的使用

    集合在程序中的比例的很重的,Kotlin针对集合进行了更加简洁和有效的封装,这边文章就简单的介绍一下list,map,set这三个最常用集合的使用. 首先在Kotlin中,明确区分了集合的只读和可变. ...

  7. Android适配器以及作用,Android RecyclerView 通用适配器的实现

    分析 我们需要在RecyclerViewAdapter内部维持一个数据集合的引用 需要实现Item的点击事件,包括短按和长按,并需要向外部提供设置监听器的方法 这个适配器必须通用,所以应该是泛型的,并 ...

  8. Android中使用Adapter(适配器)给RecycleView设置数据源

    场景 RecyclerView RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足.其可以实现数据纵向滚动,也 ...

  9. Android RecyclerView设计通用Adapter

    RecylerView 的使用频率现在也算做是很高了吧?使用起来的确是挺方便的,也容易实现一些比较好看的效果 一.一般步骤 一般的设计流程都是如下所示 首先是需要一个 JavaBean 来承载数据,包 ...

最新文章

  1. 浏览器兼容性--IE11以及Edge等下载文件的中文名出现乱码,前后端解决方案
  2. PS如何批量生成缩略图(方法可以通用其他重复劳动)
  3. 360导航源码php,114啦网址导航源码仿360网址导航最新版
  4. 《移动优先与响应式Web设计》一上册 移动优先
  5. 我们又来送书啦!这一次,用做业务的思维讲推荐系统 | 文末福利
  6. 多个iframe同时加载并动态调整大小
  7. 设计方案,拿来吧你!
  8. 前端开发 个人简历的制作 0228
  9. C语言---关于关键字const与static的简单理解
  10. C语言-Ubuntu下GDB与GCC的安装与使用
  11. JAVA_返回一个数值的相反数的几种方式.
  12. ajax用get刷新页面元素在IE下无效解决~~
  13. 文本关键词提取算法总结
  14. 计算机网络自顶向下方法 第四章 作业习题答案
  15. Python基础之文件和数据格式化
  16. [中医经络学习一]足阳明胃经
  17. cdrom是多媒体微型计算机,2011年计算机一级考试理论试题:多媒体
  18. 【计算机视觉40例】案例10:隐身术
  19. Wireshark实验——了解PDU
  20. Clickhouse 字符串函数

热门文章

  1. 原生爬取熊猫平台的数据
  2. 虚拟试衣镜 疫情期间实体服装店的救世主还是理想丰满现实骨感的“拔草神器”?
  3. 使用占位符预防SQL注入的原理
  4. BZOJ 4811([Ynoi2017]由乃的OJ-树链剖分)
  5. k均值聚类算法考试例题_K-均值法计算示例(示例)
  6. RF自动化-RIDE(跑自动化注意事项)和(配置环境注意事项)
  7. 智能存储 | 视频 DNA ,独一无二的安全标识
  8. 【mysql】phpstudy8打开MySQL命令行的方法
  9. css改变鼠标图片大小,CSS实现鼠标经过图片上图片等比缩放效果(代码实例)
  10. starGan-v2论文复现-代码完整