use of com.alibaba.android.vlayout.LayoutHelper in project Tangram-Android by alibaba.
the class PinBottomCard method convertLayoutHelper.
@Nullable
@Override
public LayoutHelper convertLayoutHelper(@Nullable LayoutHelper oldHelper) {
LayoutHelper helper = super.convertLayoutHelper(oldHelper);
if (helper instanceof FixLayoutHelper) {
((FixLayoutHelper) helper).setAlignType(FixLayoutHelper.BOTTOM_LEFT);
((FixLayoutHelper) helper).setSketchMeasure(true);
}
return helper;
}
use of com.alibaba.android.vlayout.LayoutHelper in project Tangram-Android by alibaba.
the class TangramEngine method replace.
/**
* Replace parent card's children. Cells' size should be equal with parent's children size.
*
* @param parent
* @param cells
* @since 2.1.0
*/
public void replace(Card parent, List<BaseCell> cells) {
VirtualLayoutManager layoutManager = getLayoutManager();
if (parent != null && cells != null && cells.size() > 0 && mGroupBasicAdapter != null && layoutManager != null) {
Card card = parent;
List<BaseCell> oldChildren = new ArrayList<>(parent.getCells());
if (oldChildren.size() == cells.size()) {
card.setCells(cells);
mGroupBasicAdapter.replaceComponent(oldChildren, cells);
} else {
List<LayoutHelper> layoutHelpers = layoutManager.getLayoutHelpers();
int cardIdx = mGroupBasicAdapter.findCardIdxForCard(parent);
int diff = 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) {
diff = cells.size() - layoutHelper.getItemCount();
layoutHelper.setItemCount(cells.size());
layoutHelper.setRange(start, end + diff);
} else {
layoutHelper.setRange(start + diff, end + diff);
}
}
card.setCells(cells);
mGroupBasicAdapter.replaceComponent(oldChildren, cells);
}
}
}
}
use of com.alibaba.android.vlayout.LayoutHelper in project Tangram-Android by alibaba.
the class TangramEngine method insertBatchWith.
/**
* @param insertIdx the index to be inserted
* @param groups a group list
* @since 2.1.0
*/
public void insertBatchWith(int insertIdx, List<Card> groups) {
VirtualLayoutManager layoutManager = getLayoutManager();
if (groups != null && groups.size() > 0 && mGroupBasicAdapter != null && layoutManager != null) {
List<LayoutHelper> layoutHelpers = layoutManager.getLayoutHelpers();
final List<LayoutHelper> newLayoutHelpers = new ArrayList<>(layoutHelpers);
List<LayoutHelper> insertedLayoutHelpers = new ArrayList<>();
for (int i = 0, size = groups.size(); i < size; i++) {
insertedLayoutHelpers.add(groups.get(i).getLayoutHelper());
}
if (insertIdx >= layoutHelpers.size()) {
newLayoutHelpers.addAll(insertedLayoutHelpers);
} else {
newLayoutHelpers.addAll(insertIdx, insertedLayoutHelpers);
}
layoutManager.setLayoutHelpers(newLayoutHelpers);
mGroupBasicAdapter.insertBatchComponents(insertIdx, groups);
}
}
use of com.alibaba.android.vlayout.LayoutHelper in project Tangram-Android by alibaba.
the class TangramEngine method insertWith.
/**
* A high performance method to insert cells. Do not allowed to insert to an empty Tangram. TODO handle nested card
*
* @param insertPosition the position to be inserted
* @param list new cell data list
* @since 2.1.0
*/
public void insertWith(int insertPosition, List<BaseCell> list) {
int newItemSize = list != null ? list.size() : 0;
if (newItemSize > 0 && mGroupBasicAdapter != null) {
if (insertPosition >= mGroupBasicAdapter.getItemCount()) {
insertPosition = mGroupBasicAdapter.getItemCount() - 1;
}
BaseCell insertCell = mGroupBasicAdapter.getItemByPosition(insertPosition);
int cardIdx = mGroupBasicAdapter.findCardIdxFor(insertPosition);
Card card = mGroupBasicAdapter.getCardRange(cardIdx).second;
card.addCells(card, card.getCells().indexOf(insertCell), list);
List<LayoutHelper> layoutHelpers = getLayoutManager().getLayoutHelpers();
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 (end < insertPosition) {
// do nothing
} else if (start <= insertPosition && insertPosition <= end) {
layoutHelper.setItemCount(layoutHelper.getItemCount() + newItemSize);
layoutHelper.setRange(start, end + newItemSize);
} else if (insertPosition < start) {
layoutHelper.setRange(start + newItemSize, end + newItemSize);
}
}
mGroupBasicAdapter.insertComponents(insertPosition, list);
}
}
}
use of com.alibaba.android.vlayout.LayoutHelper in project Tangram-Android by alibaba.
the class TangramEngine method removeBy.
/**
* Remove target cell. TODO handle nested card, cell in staggered, cell in onePlusN
*
* @param data
* @since 2.1.0
*/
public void removeBy(BaseCell data) {
VirtualLayoutManager layoutManager = getLayoutManager();
if (data != null && mGroupBasicAdapter != null && layoutManager != null) {
int removePosition = mGroupBasicAdapter.getPositionByItem(data);
if (removePosition >= 0) {
int cardIdx = mGroupBasicAdapter.findCardIdxFor(removePosition);
Card card = mGroupBasicAdapter.getCardRange(cardIdx).second;
card.removeCellSilently(data);
List<LayoutHelper> layoutHelpers = layoutManager.getLayoutHelpers();
LayoutHelper emptyLayoutHelper = null;
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 (end < removePosition) {
// do nothing
} else if (start <= removePosition && removePosition <= end) {
int itemCount = layoutHelper.getItemCount() - 1;
if (itemCount > 0) {
layoutHelper.setItemCount(itemCount);
layoutHelper.setRange(start, end - 1);
} else {
emptyLayoutHelper = layoutHelper;
}
} else if (removePosition < start) {
layoutHelper.setRange(start - 1, end - 1);
}
}
if (emptyLayoutHelper != null) {
final List<LayoutHelper> newLayoutHelpers = new LinkedList<>(layoutHelpers);
newLayoutHelpers.remove(emptyLayoutHelper);
layoutManager.setLayoutHelpers(newLayoutHelpers);
}
mGroupBasicAdapter.removeComponent(data);
}
}
}
}
Aggregations