Tangram-Android icon indicating copy to clipboard operation
Tangram-Android copied to clipboard

PojoGroupBasicAdapter replaceComponent bug

Open megahertz0 opened this issue 5 years ago • 3 comments

replace操作里面没有处理end == index 的情况,造成replace后,条目丢失

@Override
public void replaceComponent(Card oldGroup, Card newGroup) {
    if (mData != null && mCards != null && oldGroup != null && newGroup != null) {
        List<BaseCell> oldComponent = oldGroup.getCells();
        List<BaseCell> newComponent = newGroup.getCells();
        int index = mData.indexOf(oldComponent.get(0));
        if (index >= 0) {
            if (mCards != null) {
                List<Pair<Range<Integer>, Card>> newCards = new ArrayList<>();
                int diff = 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 (end < index) {
                        //do nothing
                        newCards.add(pair);
                    } else if (start <= index && index < end) {
                        diff = newComponent.size() - oldComponent.size();
                        Pair<Range<Integer>, Card> newPair = new Pair<>(Range.create(start, end + diff), newGroup);
                        newCards.add(newPair);
                    } else if (index <= start) {
                        Pair<Range<Integer>, Card> newPair = new Pair<>(Range.create(start + diff, end + diff), pair.second);
                        newCards.add(newPair);
                    }
                }
                mCards.clear();
                mCards.addAll(newCards);
            }
            oldGroup.removed();
            newGroup.added();
            mData.removeAll(oldComponent);
            mData.addAll(index, newComponent);
            int oldSize = oldComponent.size();
            int newSize = newComponent.size();
            notifyItemRangeChanged(index, Math.max(oldSize, newSize));
        }
    }
}

megahertz0 avatar Jun 28 '19 06:06 megahertz0

遇到同样的问题,你是怎么处理?

kebeyDing avatar Dec 21 '20 05:12 kebeyDing

自己改了一份内部用

megahertz0 avatar Dec 21 '20 06:12 megahertz0

自己改了一份内部用

能不能代码贡献下,参考下

kebeyDing avatar Dec 21 '20 07:12 kebeyDing