首页 > 解决方案 > Recycler View Sqlite 数据库的问题

问题描述

我正在显示来自Sqlite数据库的数据RecyclerView,其中有AddToCart按钮。单击此按钮后,该项目的数据将存储在sqlite数据库中。Recyclerview在可见时加载数据。问题是,当recycelerview重新加载数据时,它会给我带来奇怪的行为。不在购物车中的商品实际显示在购物车中。sqlite数据库没有问题,但是recyclerview. 当列表中的项目较少并且不需要重新加载数据时,recyclerview它不会显示这种行为。它仅在需要recyclerview在滚动时重新加载数据时显示此行为,即加载更多数据。onBindViewHolder是负责任的,因为它每次在屏幕上可见时都会重新加载数据。当不需要recyclerview重新加载数据时,此代码在较少的数据上运行良好。

final String image = list.get(position).getImage();
    final String description = list.get(position).getDescriptionn();
    final String quantity = list.get(position).getQuantity();
    final String price = list.get(position).getPricee();
    final String measuring_unit = list.get(position).getMeasuring_unit();
    String s = price + "Rs";
    viewHolder.pricee.setText(s);
    viewHolder.product_name.setText(name);
    String quantityAndMeasuringunit = quantity+" "+measuring_unit;
    viewHolder.measuring_unit.setText(quantityAndMeasuringunit);
    Picasso.get()
            .load(image)
            .placeholder(R.drawable.dairy1)
            .error(R.drawable.dairy2)
            .into(viewHolder.sriv);


    Cursor c = dh.getCartDetailItemForUpdatingAddToCartButtonBySub_cat_name(id);  //it checks if MilkAdapter2 items are present in cart table
    if (c != null && c.moveToFirst()) {
        do {
            String product_id = c.getString(c.getColumnIndex("cart_detail_id"));
            Log.e(TAG, "getCartDetailItemForUpdatingAddToCartButtonBySub_cat_name "+product_id);
            if (id.equals(product_id)) {  // if present just update the AddToCart status
                String product_quantity = c.getString(c.getColumnIndex("AddToCartQuantity"));
                Log.e(TAG, "getCartDetailItemForUpdatingAddToCartButtonBySub_cat_name "+product_quantity);
                Log.e(TAG, "ViewHolder " + " " + product_id);
                //Log.e(TAG, "inside for loop "+name + " " + quantity);

                viewHolder.textView.setVisibility(View.GONE);
                viewHolder.linearLayout.setVisibility(View.VISIBLE);
                viewHolder.digit.setText(product_quantity + "");
            }
        } while (c.moveToNext());
        c.close();
    }

    viewHolder.sriv.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent i = new Intent(context, Item_detail.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            i.putExtra("id",list.get(holder.getAdapterPosition()).getItem_id());
            context.startActivity(i);
        }
    });

ViewHolder 类

textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                textView.setVisibility(View.GONE);
                linearLayout.setVisibility(View.VISIBLE);

                String id = list.get(getAdapterPosition()).getItem_id();
                String image = list.get(getAdapterPosition()).getImage();
                String price = list.get(getAdapterPosition()).getPricee();
                String description = list.get(getAdapterPosition()).getDescriptionn();
                String quantity = list.get(getAdapterPosition()).getQuantity();
                String name = list.get(getAdapterPosition()).getName();
                String measuring_unit = list.get(getAdapterPosition()).getMeasuring_unit();
                String sub_cat_name = list.get(getAdapterPosition()).getSub_cat_name();

                Log.e(TAG, name);
                Log.e(TAG, sub_cat_name);
                InsertInCart.InsertInCartDatabase(context, Constant.vegetable_category, id, name, image, price, description, quantity, measuring_unit, sub_cat_name);
            }
        });

我认为它更像是死锁问题,因为它也进入其他项目的 if 条件。任何帮助将不胜感激。谢谢。我只点击AddToCart了第一项的按钮。

在此处输入图像描述

当我滚动到结束并返回顶部时,addtocart触发了我没有点击的第二个项目。

在此处输入图像描述 在滚动到结束倒数第二个addtocart按钮时被触发。

在此处输入图像描述

标签: androidsqliteandroid-sqliteandroid-recyclerview

解决方案


推荐阅读