首页 > 其他分享 >android RecyclerView嵌套 RecyclerView 子item 和 父item点击事件如何处理

android RecyclerView嵌套 RecyclerView 子item 和 父item点击事件如何处理

时间:2023-06-22 11:05:44浏览次数:36  
标签:Int RecyclerView item position android holder id view


前言

经常会遇到 列表嵌套列表的场景,那么父item 和 子item 会有点击重叠该怎么处理尼?

先上效果

android RecyclerView嵌套 RecyclerView 子item 和 父item点击事件如何处理_kotlin

父adapter

open class StoreListAdapter(layoutResId: Int, data: MutableList<StoreGoodsBean>): BaseQuickAdapter<StoreGoodsBean, BaseViewHolder>(layoutResId, data) {
    //子adapter
    private lateinit var goodsListAdapter: StoreGoodsListAdapter

    private var mOnChildItemChildClickListener: OnChildItemChildClickListener? = null

    override fun convert(holder: BaseViewHolder, item: StoreGoodsBean) {
        goodsListAdapter = StoreGoodsListAdapter(R.layout.fragment_cart_item_goods, arrayListOf())
        goodsListAdapter.addChildClickViewIds(R.id.goodsCheckBox)
        goodsListAdapter.setOnItemChildClickListener  { _, view, position ->
            var index = this.data.indexOfFirst { v -> v.storeCode == item.storeCode }

            this.setOnChildItemChildClick(view, index, position)
        }

        holder.setText(R.id.storeName, item.storeName)
        holder.getView<CheckBox>(R.id.storeCheckBox).isChecked = item.check!!
        holder.getView<RecyclerView>(R.id.goodsItemList).run {
            layoutManager = LinearLayoutManager(this.context)
            adapter = goodsListAdapter
            isNestedScrollingEnabled = false
        }
        goodsListAdapter.setList(item.goodsList)
    }

    protected open fun setOnChildItemChildClick(v: View, parent: Int, position: Int) {
        mOnChildItemChildClickListener?.onItemChildClick(this, v, parent, position)
    }


    open fun setOnChildItemChildClickListener(listener: OnChildItemChildClickListener) {
        this.mOnChildItemChildClickListener = listener
    }
}

子adapter

class StoreGoodsListAdapter(layoutResId: Int, data: MutableList<CartGoodsBean>): BaseQuickAdapter<CartGoodsBean, BaseViewHolder>(layoutResId, data) {
    private var imageLoader: ImageLoader = CoilUtil.getImageLoader()

    override fun convert(holder: BaseViewHolder, item: CartGoodsBean) {
        holder.getView<ImageView>(R.id.cartGoodsImg).load(item.imgUrl, imageLoader ) {
            crossfade(true)
            placeholder(R.drawable.default_img)
            error(R.drawable.default_img)
        }

        holder.getView<CheckBox>(R.id.goodsCheckBox).isChecked = item.check!!
        holder.setText(R.id.cartGoodsDes, item.description)
        holder.setText(R.id.cartGoodsPrice, "¥${item.price}")
    }

}

listener

open interface OnChildItemChildClickListener {
    fun onItemChildClick(adapter: BaseQuickAdapter<*, *>, view: View, parentPosition: Int, position: Int)
}

页面上监听

//点击店铺前的checkbox
cartGoodsListAdapter.setOnItemChildClickListener  { _, view, position ->
    when (view.id) {
        R.id.storeCheckBox -> checkAllByStore(position)
    }
}
//点击店铺中商品前的checkbox
cartGoodsListAdapter.setOnChildItemChildClickListener(object : OnChildItemChildClickListener {
    override fun onItemChildClick(
        adapter: BaseQuickAdapter<*, *>,
        view: View,
        parentPosition: Int,
        position: Int,
    ) {
        when (view.id) {
            R.id.goodsCheckBox -> checkGoods(parentPosition, position)
        }
    }
})

标签:Int,RecyclerView,item,position,android,holder,id,view
From: https://blog.51cto.com/u_16163453/6534414

相关文章

  • Android开发必备——注解
    前言阅读官方源码以及各类第三方框架时可以发现,很多地方都有注解,作为一名Android程序员,掌握注解属于必不可少的一项技能。1.什么是注解注解是以@符号开头的用来标识如类、字段、方法等的工具。说到注解,就不得不提另外一个概念——注释,两者其实都是做解释的功能,只不过注释是面向开......
  • Android 屏幕适配基础
    Pixels和dp、sp的区别不同屏幕密度下,1p显示的物理长度不同1dp在不同屏幕上显示相同的物理长度sp只用在字体上,和dp一样为了让在不同设备上有一致的显示效果单位尺寸搞清楚屏幕的各种单位含义,是屏幕适配的基础屏幕尺寸含义:手机对角线的物理尺寸单位:英寸(inch),1英寸=2.54cm屏幕尺寸......
  • Android 多任务配置
    Android多任务配置本篇文章是为了了解安卓中的多任务系统,了解安卓中Task的栈结构,以及怎么配置app的多任务,模仿微信小程序。多任务配置在安卓手机上,当我们打开微信小程序,可以看到小程序其实是一个独立的任务,这是怎么配置的呢。其实很简单,我们只需要在安卓项目的配置文件中,对Activit......
  • 好家伙66万字,又一份牛逼的Android笔记面世了
    前言很久以前,凭借四大组件、Java基础等知识,便可开开心心的开发,轻松地上岗。而随着Android的不断发展完善,各种组件库越来越成熟,学习资料越来越多,我们却慢慢地看不到方向。信息爆炸的时代,到底该如何提升自己?如何才能找到真正利己的信息?如何才能看清前路的方向?为此我专门找了一份《And......
  • 四年Android开发,在拉勾上投了十几个简历,没有一个面试邀请......药丸了
    在浏览某论坛的时候看到一名程序员吐槽:坐标杭州,四年Android开发一枚,技术不顶尖也不算差吧,这边加班太猛了,在考虑换一个岗位。在拉勾上投了十几个简历,全都是不合适,没有一个面试邀请!!!简历在拉勾上是开放的,竟然没有一个感兴趣的公司打电话给我。前年这个时候,接到的电话还是很多的,这才过......
  • Android视图加载优化——Factory2设置方法
    前言Factory2是直接继承于Factory,继续跟踪下Factory的源码,比Factory的功能更加强大。当我们新建Activity的时候,大部分情况是继承AppCompatActivity。提供了向后兼容性。本文将深入探索AppCompatActivity的视图加载,探索将xml布局文件中的TextView替换成AppCompatTextVi......
  • 6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我?
    一小伙工作快3年了,拿到了阿里云Android开发岗位P6的offer,算HR面一起,加起来有6轮面试了,将近3个月的时间,1轮同级+1轮Android用人部门leader+1轮Android组leader+1轮项目CTO+1轮HR+1轮HRBP。一路上各种事件分发机制、自定义View、handler原理、多线程、hashmap、手写算法、......
  • 三年Android开发就这水平?我还不如去招应届生
    公司前段缺人,也面了不少android程序员,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是3年工作经验,但面试中,不提算法逻辑,仅仅基础的技术很多也知之不详,多数人数年的工作经验仅仅是用大量第三......
  • 【Android】如何实现同一个布局保证高度不变,使用不同高度的背景
    背景预实现一个切换tab,实现选中与未选中的背景切换,特别之处在于选中背景图和未选中背景图高度不相同,切换之后需要在java代码中动态设置LayoutParams改变高度。预期效果当前问题点选中背景为.9图,未选中背景为xml中通过shape实现。将当前ViewGroup设置为选中状态的固定高度选中效果正......
  • Android binder 机制驱动核心源码详解
    前言应用程序中执行getService()需与ServiceManager通过binder跨进程通信,此过程中会贯穿Framework、Natve层以及Linux内核驱动。binder驱动的整体分层如上图,下面先来宏观的了解下getService()在整个Android系统中的调用栈,ServiceManager本身的获取:与ServiceManage......