请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

购物车的删除逻辑有问题

mTotalCount只是初始化了在后续的操作中没有赋值,当从前往后删除时实体的position与adapter中的位置并不一致

正在回答

2回答

@OnClick(R2.id.tv_top_shop_cart_del)
void onClickRemoveSelectedItem(){
    final List<MultipleItemEntity> data = mAdapter.getData();
    // 要删除的数据
    final List<MultipleItemEntity> deleteEntities = new ArrayList<>();
    int i = 0;
    for (MultipleItemEntity entity : data){
        final boolean isSelected = entity.getField(ShopCartMultipleFields.IS_SELECTED);
        entity.setField(ShopCartMultipleFields.POSITION, i);
        if (isSelected){
            deleteEntities.add(entity);
        }
        i++;
    }
    for (MultipleItemEntity entity : deleteEntities){
        final int removePosition = entity.getField(ShopCartMultipleFields.POSITION);
        if (removePosition <= mAdapter.getItemCount()) {
            mAdapter.remove(removePosition);
            //更新数据
            mAdapter.notifyItemRangeChanged(removePosition, mAdapter.getItemCount());
        }
    }
    checkItemCount();
}

可以这样写

0 回复 有任何疑惑可以回复我~
  • 提问者 Marsor #1
    非常感谢!挺不错的
    回复 有任何疑惑可以回复我~ 2017-09-30 16:26:47
  • @OnClick(R2.id.tv_top_shop_cart_remove_selected)
        void onClickRemoveSelectedItem() {
            final List<MultipleItemEntity> data = mAdapter.getData();
            //要删除的数据
            final List<MultipleItemEntity> deleteEntities = new ArrayList<>();
            int i = 0;
            for (MultipleItemEntity entity : data) {
                final boolean isSelected = entity.getField(ShopCartItemFields.IS_SELECTED);
                entity.setField(ShopCartItemFields.POSITION, i); //每次重新赋值位置
                if (isSelected) {
                    deleteEntities.add(entity);
                }
                i++;
            }
            //从List中最后一个开始删除,不影响整个下标
            for (int j = deleteEntities.size()-1; j >=0; j--) {
                int removePosition = deleteEntities.get(j).getField(ShopCartItemFields.POSITION);
                mAdapter.remove(removePosition); //remove方法内部调用notifyItemRangeChanged
            }
            //checkItemCount();
        }
    回复 有任何疑惑可以回复我~ 2017-10-01 22:50:27
zoro_ 2018-03-13 13:07:06

@说的就是你傻冒  点击全选,再删 有问题.

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信