Recycler View Sqlite数据库的问题

时间:2018-08-27 12:21:32

标签: android sqlite android-recyclerview android-sqlite recycler-adapter

我正在显示SqliteRecyclerView按钮的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);
            }
        });

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

enter image description here

当我滚动到末尾并回到顶部时,第二项addtocart被触发,但我没有单击。

enter image description here 滚动到倒数第二秒时,最后一个addtocart按钮被触发。

enter image description here

0 个答案:

没有答案