更新现有列表项的数量,而不是添加新项

时间:2016-04-12 19:18:19

标签: android list android-recyclerview android-adapter

我正在开发一个POS管理系统,用户可以从产品列表中选择一个项目,并在检查列表中添加所选值。我可以在点击产品列表后成功将新项目添加到检查列表,但无法更新检查列表项目的数量已添加之前。请参阅图片以获得清晰的演示,

Screenshot

从图像中可以看到每个产品项目都已添加为检查清单中的新项目,而不是更新数量。

我正在寻找一种解决方案,在点击产品列表中的项目后更新检查清单数量。

这是我的产品列表recyclerview的点击监听器,

recyclerProducts.addOnItemTouchListener(
                new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
                    @Override
                    public void onItemClick(View view, int position) {
                        // TODO Handle item click

                        // productList is the arraylist used in product list 
                        Products product = productList.get(position);

                        Contents c = new Contents();
                        c.setTitle(product.getName());
                        c.setQuantity(product.getQuantity());
                        orderList.add(c);
                        recyclerListAdapter.notifyDataSetChanged();

                    }
                })
        );

这是检查清单的适配器,

private List<Contents> contentsList;

    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView title;
        public TextView quantity;

        public MyViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.txtTitle);
            quantity = (TextView) view.findViewById(R.id.txtQuantity);
        }
    }

    public RecyclerListAdapter(List<Contents> contentsList) {
        this.contentsList = contentsList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_product, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Contents contents = contentsList.get(position);

        holder.title.setText(contents.getTitle());
        holder.quantity.setText("1");
    }

    @Override
    public int getItemCount() {
        return contentsList.size();
    }

2 个答案:

答案 0 :(得分:1)

应该做这样的事情

 <%

        String convert = request.getParameter("textarea1");
        PrintWriter wr = response.getWriter();
        File f =new File("file121.java");
        if(!f.exists())
        {
            f.createNewFile();
            wr.println("File is created\n");

        }
        FileWriter write = new FileWriter(f);
        BufferedWriter bf = new BufferedWriter(write);
        bf.write(convert);
        bf.close();
        wr.println("File writing done\n");

        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
        int result = compiler.run(null,null,null,"file121.java");
        if(result==0){
            wr.println("Compilation Successful");
        }
        else{
            wr.println("Compilation Failed");
        }




     %>   

使用散列图作为容器而不是列表将是更好的选择,因为我假设产品类型/名称是唯一的。

地图宣言。

for(Contents contents : orderList){
    if (contents.getTitle().equals(product.getName())){
        contents.setQuantity(product.getQuantity())
        recyclerListAdapter.notifyDataSetChanged();
        return;
    }
//assume existing item was not found and add as before
Contents c = new Contents();
c.setTitle(product.getName());
c.setQuantity(product.getQuantity());
orderList.add(c);
recyclerListAdapter.notifyDataSetChanged();
return;

用法

Map<String,Contents> contentsMap = new HashMap<>();

请注意,哈希映射不需要迭代一堆值来更新数量。当您需要迭代值时,可以使用map.values()方法,如此。

    Contents contents = contentsMap.get(product.getName());
    if (contents != null){
        contents.setQuantity(product.getQuantity());//update existing quantity
        recyclerListAdapter.notifyDataSetChanged();
    } else{
        Contents newContents = new Contents();
        newContents.setTitle(product.getName());
        newContents.setQuantity(product.getQuantity());
        contentsMap.put(product.getName(),newContents);
        recyclerListAdapter.notifyDataSetChanged();
    }

答案 1 :(得分:0)

我在想你想在这里做什么是在你的购物车(容纳你的物品的容器),你想知道物品ID,因为你已经知道原始列表中的物品ID,你可以在每次添加时检查一个新项目,如果它已经存在,如果已经存在,则更新它而不是添加新项目。

我假设您将数据(针对每个订单)存储在具有列的本地表中。因此,您只需查询该特定项目并更新它是否已存在。

只是我的两分钱,我希望它有所帮助!

祝你好运,编码愉快!