美文网首页
Android 二级列表实现

Android 二级列表实现

作者: 坐怀灬不乱 | 来源:发表于2020-01-07 09:53 被阅读0次
    • 大致思路
      使用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) {}
            }
        }
    

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

    相关文章

      网友评论

          本文标题:Android 二级列表实现

          本文链接:https://www.haomeiwen.com/subject/pofractx.html