mirror of
https://github.com/alibaba/Tangram-Android.git
synced 2026-10-22 09:17:50 +08:00
remove data by card
This commit is contained in:
@@ -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<JSONArray, Card, BaseCell>
|
||||
* @param group
|
||||
*/
|
||||
public void removeComponents(Card group) {
|
||||
|
||||
VirtualLayoutManager layoutManager = getLayoutManager();
|
||||
if (group != null && mGroupBasicAdapter != null && layoutManager != null) {
|
||||
int cardIdx = mGroupBasicAdapter.findCardIdxForCard(group);
|
||||
List<LayoutHelper> 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<LayoutHelper> newLayoutHelpers = new LinkedList<>(layoutHelpers);
|
||||
newLayoutHelpers.remove(emptyLayoutHelper);
|
||||
layoutManager.setLayoutHelpers(newLayoutHelpers, false);
|
||||
}
|
||||
mGroupBasicAdapter.removeComponents(group);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+21
-1
@@ -306,7 +306,7 @@ public abstract class GroupBasicAdapter<L, C> extends VirtualLayoutAdapter<Binde
|
||||
/**
|
||||
*
|
||||
* @param card
|
||||
* @return card ragne of given instance
|
||||
* @return card range of given instance
|
||||
*/
|
||||
public Range<Integer> getCardRange(Card card) {
|
||||
if (card == null) return Range.create(0, 1);
|
||||
@@ -319,6 +319,20 @@ public abstract class GroupBasicAdapter<L, C> extends VirtualLayoutAdapter<Binde
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param card
|
||||
* @return card index of given instance
|
||||
*/
|
||||
public int findCardIdxForCard(L card) {
|
||||
for (int i = 0, size = mCards.size(); i < size; i++) {
|
||||
if (mCards.get(i).second == card) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param position cell's adapter position
|
||||
@@ -536,6 +550,12 @@ public abstract class GroupBasicAdapter<L, C> extends VirtualLayoutAdapter<Binde
|
||||
*/
|
||||
abstract public void removeComponent(C component);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param group a group of components to be removed.
|
||||
*/
|
||||
abstract public void removeComponents(L group);
|
||||
|
||||
/**
|
||||
* Do not call this method directly. It's not designed for users.
|
||||
* @param pos
|
||||
|
||||
+30
-1
@@ -418,11 +418,40 @@ public class PojoGroupBasicAdapter extends GroupBasicAdapter<Card, BaseCell> {
|
||||
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<Pair<Range<Integer>, 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<Range<Integer>, 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<Range<Integer>, 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<BaseCell> components) {
|
||||
if (mData != null && components != null && !components.isEmpty() && pos > 0) {
|
||||
|
||||
Reference in New Issue
Block a user