Я отображаю данные из базы 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
первого элемента.
Когда я прокручивал до конца и возвращался к началу второго элемента, addtocart
срабатывал, на который я не нажимал.
При прокрутке до конца сработала последняя последняя кнопка addtocart
.