android - 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
按钮时被触发。
解决方案
推荐阅读
- java - java - 如何根据java 8中的值合并对象的ArrayList?
- javascript - 如果条件与前面的条件相同,条件语句在使用下一步按钮时不会触发我的动画
- excel - 根据列和单元格之间的差异创建和循环列
- r - 是否有用于返回大多数但不是所有向量中的共享值的 R 函数?
- java - StringCoding 有 threadLocal
- reactjs - 如何重置“multiselect-react-dropdown”中的选定值
- laravel - 如何使用 vue.js 将多个带有键的值传递给 url
- html - 我将如何缩小通过内容引入的 SVG?
- c++ - 重载浅拷贝和深拷贝构造函数 cpp
- c# - 服务器(GUI)在启动后冻结。在控制台中工作正常