Проблема с базой данных Recycler View Sqlite - PullRequest
0 голосов
/ 27 августа 2018

Я отображаю данные из базы 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);
            }
        });

Я думаю, что это больше похоже на проблему взаимоблокировки, потому что оно входит в условие и для других предметов. Любая помощь будет оценена. Благодарю. Я нажал только на кнопку AddToCart первого элемента.

enter image description here

Когда я прокручивал до конца и возвращался к началу второго элемента, addtocart срабатывал, на который я не нажимал.

enter image description here При прокрутке до конца сработала последняя последняя кнопка addtocart.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...