BaseRecyclerViewAdapterHelper
                                
                                 BaseRecyclerViewAdapterHelper copied to clipboard
                                
                                    BaseRecyclerViewAdapterHelper copied to clipboard
                            
                            
                            
                        nodeRemoveData接口删除最后一个节点的时候会挂掉
我使用NodeTreeAdapter做了3级树形试图,在使用nodeRemoveData接口删除SecondNode节点时,删除最后一个SecondNode节点总会导致程序挂掉,删除别的SecondNode节点不会,报错的内容总是IndexOutOfBoundsException,希望能修复这个bug,万分感谢!
+1
+1,最简单的解决办法是try catch.在catch中notifyItemRangeRemoved(position, 1); 问题原因是删除节点时会同时做这些动作:
- 移除子项
- 移除node自己
- 移除脚部
前2步没问题,第3步时:data.size()就与删除的position相等了,所以报下标越界。 具体代码:
BaseNodeAdapter.kt
   /**
     * 从数组中移除
     * @param position Int
     * @return Int 被移除的数量
     */
    private fun removeNodesAt(position: Int): Int {
        if (position >= data.size) {
            return 0
        }
        // 记录被移除的item数量
        var removeCount = 0
        // 先移除子项
        removeCount = removeChildAt(position)
        // 移除node自己
        this.data.removeAt(position)
        removeCount += 1
        val node = this.data[position]     <-------- 此处出现下标越界
        // 移除脚部
        if (node is NodeFooterImp && node.footerNode != null) {
            this.data.removeAt(position)
            removeCount += 1
        }
        return removeCount
    }
+1,最简单的解决办法是try catch.在catch中notifyItemRangeRemoved(position, 1); 问题原因是删除节点时会同时做这些动作:
- 移除子项
- 移除node自己
- 移除脚部
前2步没问题,第3步时:data.size()就与删除的position相等了,所以报下标越界。 具体代码:
BaseNodeAdapter.kt /** * 从数组中移除 * @param position Int * @return Int 被移除的数量 */ private fun removeNodesAt(position: Int): Int { if (position >= data.size) { return 0 } // 记录被移除的item数量 var removeCount = 0 // 先移除子项 removeCount = removeChildAt(position) // 移除node自己 this.data.removeAt(position) removeCount += 1 val node = this.data[position] <-------- 此处出现下标越界 // 移除脚部 if (node is NodeFooterImp && node.footerNode != null) { this.data.removeAt(position) removeCount += 1 } return removeCount }
感谢兄弟
请问删除子节点nodeRemoveData()如何传值 如何获取父node 与子节点相对位置
BaseNode parentNode = getAdapter().getItem(getAdapter().findParentNode(position)); int childIndex = parentNode.getChildNode().indexOf(data);