Android 二级列表实现

  • 大致思路
    使用RecyclerView嵌套RecyclerView的方式实现很明显是不现实的,不仅会有滑动冲突,而且消耗资源,网上寻找了大量的轮子也没有找到合适的,索性自己硬着头皮写了一个。
    实现思路是动态插入,要求的数据格式如下:
[{
        "list1": "list",
        "child": [{
                "child1": "child1"
            },
            {
                "child2": "child2"
            }, {
                "child3": "child3"
            }
        ]
    }
]

一级列表中包含二级列表

  • 打开一级列表方法
    bean是上述的childList中二级列表数组,position是点击的Item的下标,size是bean的长度,isScroll是如果点击的屏幕中最下面的那个一个,是否将二级列表中的第一个自动滚动进屏幕,以免用户以为列表打开失败
 fun addData(bean: MutableList<Bean>, position: Int, size: Int, isScroll: Boolean = true) {
        for (i in 0 until size) {
            add(bean[i], position + 1 + i)
        }
        if (isScroll) {
            //等于空代表Item不可见,在屏幕外,就移动进屏幕
            if (recyclerView.layoutManager?.findViewByPosition(position + 1)?.getGlobalVisibleRect(Rect()) == null) {
                recyclerView.scrollToPosition(position + 1)
            }
        }
    }
  • add方法,L就是一个泛型,就是你所使用的数据类型
open fun add(data: L, index: Int = -1) {
        if (index != -1) {
            l.add(index, data)
            notifyItemInserted(index)
            notifyItemRangeChanged(index, itemCount)
        } else {
            l.add(data)
            notifyItemInserted(l.size)
            notifyItemRangeChanged(l.size, itemCount)
        }
    }
  • 关闭一级列表方法
    position同上,size也同上,是childList的长度
private fun hideData(position: Int, size: Int) {
        val intList = mutableListOf<Int>()
        for (i in 0 until size) {
            intList.add((position + 1 + i))
        }
        remove(intList) {
            
        }
    }

批量使用下标移除方法
list是待移除的下标集合

    open fun remove(list: MutableList<Int>) {
        list.sortWith(Comparator { o1, o2 ->
            return@Comparator Integer.compare(o1, o2)
        })

        for (i in 0 until list.size) {
            var posi = list[i]
            posi -= i
            remove(posi) {}
        }
    }

以上就是大概实现思路,如果有问题评论告诉我哦~
顺利使用的老铁帮点个赞,谢谢啦~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。