如何检查recyclerView中是否存在新添加的商品?

时间:2018-12-10 13:36:32

标签: android android-recyclerview

实际上,我正在开发一个清单应用程序,在其中扫描一些EAN代码,然后插入一个项目的数量,然后将其添加到recyclerView的ArrayList中。

现在我没有问题,因为我已经制作了库存部分,其中在recyclerView中,每个项目必须具有不同的行,但是现在我必须成为订单部分,如果在ArrayList中还存在某个项目,我就必须这样做加起来就是数量,然后放在recyclerView的顶部。

当我要添加一个新项目并检查它是否存在于ArrayList中时,我试图制作一个for循环之类的东西,如果存在,我要将该项目数量与旧项目相加,但是问题是有时应用程序将崩溃,并且该项目不在recyclerView之上。

您对我该如何做有什么建议?

for(ItemModel item : itemModel){
                        if(item.getCodiceArticolo().equals(code.getText().toString())){
                            item.setQta(String.valueOf(Integer.parseInt(item.getQta()) + 1));
                        }
                    }

我试图做类似的事情。

4 个答案:

答案 0 :(得分:1)

尝试此代码:

        ItemModel matchedItem = null;
        int matchedItemIndex=-1;
        for (ItemModel item : itemModel) {
            if(item.getCodiceArticolo().equals(code.getText().toString())){
               item.setQta(String.valueOf(Integer.parseInt(item.getQta()) + 1));
               matchedItem=item;
               matchedItemIndex=itemModel.indexOf(item);
               break;
              }

        }

        if(matchedItemIndex>-1){
        itemModel.remove(matchedItem);
        itemModel.add(0, matchedItem);
        notifyItemMoved(index,0);
      }

答案 1 :(得分:1)

您没有将错误日志添加到列表中,所以我想您的程序会崩溃,因为有时某个值没有数量(没有有效数字),因此无法解析该数字,因此在这种情况下,您只需编写列表中还没有一个项目。

        for (ItemModel item :itemModel) {
        if (item.getCodiceArticolo().equals(code.getText().toString())) {
            try {
                item.setQta(String.valueOf(Integer.parseInt(item.getQta()) + 1));
            } catch (Exception ex) {
                item.setQta(String.valueOf(1));
            }
        }
    }

如果这样做没有帮助,请附加错误日志。

答案 2 :(得分:0)

由于应用程序崩溃,可能未按照注释中的建议初始化您的arraylist。

要检查项目是否存在,可以使用

if(arraylist_of_items!=null && arraylist_of_items.contains(item)){
  // do your stuff here
}

答案 3 :(得分:0)

三天后,我收到了“ ConcurrentModificationException”,但现在我正在尝试另一种受其他答案启发的方法,或者更好的是以下一种方法:

 boolean nuovo = true;
                        for(ItemModel itemModels : itemModel){
                            if(itemModels.getCodiceArticolo().equals(code.getText().toString())){
                                itemModels.setQta(String.valueOf(Integer.parseInt(itemModels.getQta()) + 1));
                                nuovo = false;
                                break;
                            }
                        }

                        if(nuovo){
                            itemModel.add(new ItemModel(code.getText().toString(), "1"));
                        }

并且不再崩溃,并且看起来工作正常。

非常感谢您的建议。

更新

感谢kartik malik ANSWER,我什至可以通过在顶部添加最后一个添加项来“更新”我的商品,因为我使用的是反向recyclerView,我这样做是在浪费时间,而不是将商品放置在位置0

  ItemModel matchedItem = null;
                        int matchedItemIndex = -1;
                        boolean nuovo = true;
                        for(ItemModel itemModels : itemModel){
                            if(itemModels.getCodiceArticolo().equals(code.getText().toString())){
                                itemModels.setQta(String.valueOf(Integer.parseInt(itemModels.getQta()) + Integer.parseInt(qta.getText().toString())));
                                MediaPlayer mpFound = MediaPlayer.create(OrdiniActivity.this, R.raw.errorsound);
                                mpFound.start();
                                matchedItem = itemModels;
                                matchedItemIndex = itemModel.indexOf(itemModels);
                                nuovo = false;
                                break;
                            }
                        }

                        if(matchedItemIndex> -1){
                            itemModel.remove(matchedItem);
                            itemModel.add(matchedItem);
                        }

                        if(nuovo){
                            itemModel.add(new ItemModel(code.getText().toString(), qta.getText().toString()));
                        }

使用布尔值检查项目是否存在,如果不存在,则将该项目添加为新项目。