From 17481f02e014dd341961faf2237c4dd62b130fad Mon Sep 17 00:00:00 2001 From: limuyang Date: Thu, 26 Dec 2019 18:10:07 +0800 Subject: [PATCH] writing childExpandAndCollapseOther --- app/build.gradle | 4 +- .../node/tree/provider/FirstProvider.java | 1 + .../library/adapter/base/BaseNodeAdapter.kt | 85 +++++++++++++++++-- 3 files changed, 80 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1eeb65e25..be95e118e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { - minifyEnabled true - zipAlignEnabled true + minifyEnabled false + zipAlignEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } diff --git a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java index de5851721..cb6186d1c 100644 --- a/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java +++ b/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/node/tree/provider/FirstProvider.java @@ -37,6 +37,7 @@ public void convert(@NotNull BaseViewHolder helper, @Nullable BaseNode data) { @Override public void onClick(@NotNull BaseViewHolder helper, @NotNull View view, BaseNode data, int position) { +// getAdapter().expandAndCollapseOther(position, false ,false); getAdapter().expandAndCollapseOther(position); } } diff --git a/library/src/main/java/com/chad/library/adapter/base/BaseNodeAdapter.kt b/library/src/main/java/com/chad/library/adapter/base/BaseNodeAdapter.kt index dd5f8ce2d..9079e4c9d 100644 --- a/library/src/main/java/com/chad/library/adapter/base/BaseNodeAdapter.kt +++ b/library/src/main/java/com/chad/library/adapter/base/BaseNodeAdapter.kt @@ -353,8 +353,19 @@ abstract class BaseNodeAdapter(data: MutableList? = null) isCollapseChild: Boolean = true, animate: Boolean = true, notify: Boolean = true) { + + val parentPosition = findParentNode(position) + if (parentPosition != -1) { + // 如果是子节点 + childExpandAndCollapseOther(position, parentPosition, isExpandedChild, isCollapseChild, animate, notify) + return + } + val count = expand(position, isExpandedChild, animate, notify) + // 当前 position 之前有 node 收起以后,position的位置就会变化 + var newPosition = position + //如果此 position 之前有 node if (position > 0) { // 在此之前的 node 总数 @@ -362,24 +373,82 @@ abstract class BaseNodeAdapter(data: MutableList? = null) // 记录被折叠了 node 的总数 var collapseSize = 0 var i = 0 - // 总数 - 折叠后的总数即为此前还剩余的 node 总数,再减去 1 即为索引。 - while (i < (beforeAllSize - collapseSize - 1)) { + // 循环添加: 总数 - 折叠后的总数即为此前还剩余的 node 总数。 + do { collapseSize += collapse(i, isCollapseChild, animate, notify) i++ - } + println("-------->> $beforeAllSize i: $i size: $collapseSize") + } while (i < (beforeAllSize - collapseSize)) + + newPosition = position - collapseSize } //如果此 position 之后有 node - if ((position + count + 1) < data.size) { + println("22-------->> $newPosition i: ${(newPosition + count + 1)} size: ${data.size}") + if ((newPosition + count + 1) < data.size) { // 后面的 node 总数 = 总data的size - (展开位置的索引 + 展开的数量 + 1) - val afterAllSize = data.size - position - count - 1 +// val afterAllSize = data.size - position - count - 1 +// var collapseSize = 0 + // 位置索引 + 展开的数量 + 1 即为循环开始的索引 + var i = newPosition + count + 1 + while (i < (data.size)) { + println("11-------->> i: $i size: ${data.size}") + collapse(i, isCollapseChild, animate, notify) + i++ + } + + } + } + + private fun childExpandAndCollapseOther(@IntRange(from = 0) position: Int, + parentPosition: Int, + isExpandedChild: Boolean = false, + isCollapseChild: Boolean = true, + animate: Boolean = true, + notify: Boolean = true) { + val count = expand(position, isExpandedChild, animate, notify) + + val firstPosition: Int +// var dataSize: Int + if (parentPosition == -1) { + firstPosition = 0 + } else { + firstPosition = parentPosition + 1 + } + + // 当前 position 之前有 node 收起以后,position的位置就会变化 + var newPosition = position + + + val bSize = position - firstPosition + //如果此 position 之前有 node + if (bSize > 0) { + // TODO + // 在此之前的 node 总数 + val beforeAllSize = position + // 记录被折叠了 node 的总数 var collapseSize = 0 - // 展开的位置索引 + 展开的数量 即为循环开始的索引 - var i = position + count - while (i < (afterAllSize - collapseSize - 1)) { + var i = 0 + // 循环添加: 总数 - 折叠后的总数即为此前还剩余的 node 总数。 + do { collapseSize += collapse(i, isCollapseChild, animate, notify) i++ + println("-------->> $beforeAllSize i: $i size: $collapseSize") + } while (i < (beforeAllSize - collapseSize)) + + newPosition = position - collapseSize + } + + //如果此 position 之后有 node + println("22-------->> $newPosition i: ${(newPosition + count + 1)} size: ${data.size}") + if ((newPosition + count + 1) < data.size) { + var i = newPosition + count + 1 + while (i < (data.size)) { + println("11-------->> i: $i size: ${data.size}") + collapse(i, isCollapseChild, animate, notify) + i++ } + } }