From 3ef511f63f55ccafb4ebfb992edd2c723a5e4cdc Mon Sep 17 00:00:00 2001 From: longerian Date: Thu, 18 Jan 2018 11:40:02 +0800 Subject: [PATCH] remove data by card --- .../tmall/wireless/tangram/TangramEngine.java | 30 +++++++++++++++++- .../core/adapter/GroupBasicAdapter.java | 22 ++++++++++++- .../concrete/PojoGroupBasicAdapter.java | 31 ++++++++++++++++++- 3 files changed, 80 insertions(+), 3 deletions(-) diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/TangramEngine.java b/tangram/src/main/java/com/tmall/wireless/tangram/TangramEngine.java index b4e8c06..5edef3f 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/TangramEngine.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/TangramEngine.java @@ -28,6 +28,7 @@ import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; +import android.text.Html; import android.text.TextUtils; import android.util.Pair; import android.view.View; @@ -601,7 +602,34 @@ public class TangramEngine extends BaseTangramEngine * @param group */ public void removeComponents(Card group) { - + VirtualLayoutManager layoutManager = getLayoutManager(); + if (group != null && mGroupBasicAdapter != null && layoutManager != null) { + int cardIdx = mGroupBasicAdapter.findCardIdxForCard(group); + List layoutHelpers = layoutManager.getLayoutHelpers(); + LayoutHelper emptyLayoutHelper = null; + int removeItemCount = 0; + if (layoutHelpers != null && cardIdx >= 0 && cardIdx < layoutHelpers.size()) { + for (int i = 0, size = layoutHelpers.size(); i < size; i++) { + LayoutHelper layoutHelper = layoutHelpers.get(i); + int start = layoutHelper.getRange().getLower(); + int end = layoutHelper.getRange().getUpper(); + if (i < cardIdx) { + // do nothing + } else if (i == cardIdx) { + removeItemCount = layoutHelper.getItemCount(); + emptyLayoutHelper = layoutHelper; + } else { + layoutHelper.setRange(start - removeItemCount, end - removeItemCount); + } + } + if (emptyLayoutHelper != null) { + final List newLayoutHelpers = new LinkedList<>(layoutHelpers); + newLayoutHelpers.remove(emptyLayoutHelper); + layoutManager.setLayoutHelpers(newLayoutHelpers, false); + } + mGroupBasicAdapter.removeComponents(group); + } + } } } \ No newline at end of file diff --git a/tangram/src/main/java/com/tmall/wireless/tangram/core/adapter/GroupBasicAdapter.java b/tangram/src/main/java/com/tmall/wireless/tangram/core/adapter/GroupBasicAdapter.java index bcc20d8..e4f922e 100644 --- a/tangram/src/main/java/com/tmall/wireless/tangram/core/adapter/GroupBasicAdapter.java +++ b/tangram/src/main/java/com/tmall/wireless/tangram/core/adapter/GroupBasicAdapter.java @@ -306,7 +306,7 @@ public abstract class GroupBasicAdapter extends VirtualLayoutAdapter getCardRange(Card card) { if (card == null) return Range.create(0, 1); @@ -319,6 +319,20 @@ public abstract class GroupBasicAdapter extends VirtualLayoutAdapter extends VirtualLayoutAdapter { mCards.clear(); mCards.addAll(newCards); mData.remove(component); - notifyItemRemoved(removePosition); + notifyItemRangeChanged(removePosition, 1); } } } + @Override + public void removeComponents(Card group) { + if (group != null && mCards != null) { + List, Card>> newCards = new ArrayList<>(); + int cardIdx = findCardIdxForCard(group); + int removeItemCount = 0; + int removePosition = 0; + for (int i = 0, size = mCards.size(); i < size; i++) { + Pair, Card> pair = mCards.get(i); + int start = pair.first.getLower(); + int end = pair.first.getUpper(); + if (i < cardIdx) { + //do nothing + newCards.add(pair); + } else if (i == cardIdx) { + removePosition = start; + removeItemCount = end - start; + } else { + Pair, Card> newPair = new Pair<>(Range.create(start - removeItemCount, end - removeItemCount), pair.second); + newCards.add(newPair); + } + } + mCards.clear(); + mCards.addAll(newCards); + mData.removeAll(group.getCells()); + notifyItemRangeRemoved(removePosition, removeItemCount); + } + } + @Override public void insertComponents(int pos, List components) { if (mData != null && components != null && !components.isEmpty() && pos > 0) {