[英]How to stop automatic scroll up in recycler view when increment button is clicked in recycler view item?
当我在回收站视图中单击递增/递减数量按钮时,回收站视图会自动向上滚动。 如何避免自动向上滚动? 下面是我的代码。 请帮我。
这是我在回收站视图适配器设置的主要活动中的代码
private void loadCartItems() {
//init list
//get orders
shopNameTv.setText(shopname);
cartList = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
reference.child(firebaseAuth.getUid()).child("Cart")
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//clear list before adding item
cartList.clear();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
CartModel cartModel = ds.getValue(CartModel.class);
Map<String, Object> map = (Map<String, Object>) ds.getValue();
Object price = map.get("Item_Price");
int cost = Integer.parseInt(String.valueOf(price));
allTotalPrice += cost ;
sTotalTv.setText("₹" + allTotalPrice);
allTotalPriceTv.setText("₹" + (allTotalPrice + Integer.parseInt(deliveryFee.replace("₹", ""))));
cartList.add(cartModel);
}
LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
cartItemsRv.setLayoutManager(mLayoutManager);
cartItemsRv.setItemAnimator(null);
//setup adapter
cartAdapter = new CartAdapter(CartActivity.this, cartList);
//set adapter
cartItemsRv.scrollToPosition(cartList.size());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
//allTotalPrice = allTotalPrice + Integer.parseInt(price);
dFeeTv.setText("₹" + deliveryFee);
sTotalTv.setText("₹" + allTotalPrice);
allTotalPriceTv.setText("₹" + (allTotalPrice + Integer.parseInt(deliveryFee.replace("₹", ""))));
}
这是我的适配器代码
if (Integer.parseInt(stk) == 0) {
Toast.makeText(context, "Product Stock Limit reached", Toast.LENGTH_SHORT).show();
}
else {
holder.incrementBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int number = 0;
number = Integer.parseInt(holder.itemQuantityTv.getText().toString().trim());
number++;
//((CartActivity)context).reload();
holder.itemQuantityTv.setText(""+number);
int pe = number * Integer.parseInt(holder.itemPriceEachTv.getText().toString().trim());
holder.itemPriceTv.setText(""+pe);
double tx = Double.parseDouble((((CartActivity)context).allTotalPriceTv.getText().toString().trim().replace("₹","")));
double totalPrice = tx + Double.parseDouble(cartModel.getItem_Price().replace("₹",""));
double deliveryFee = Double.parseDouble((((CartActivity)context).deliveryFee.replace("₹","")));
double sTotalPrice = Double.parseDouble(String.format("%.0f", totalPrice));
((CartActivity)context).allTotalPrice = 0;
((CartActivity)context).sTotalTv.setText("₹"+String.format("%.0f", sTotalPrice));
((CartActivity)context).allTotalPriceTv.setText("₹"+String.format("%.0f", Double.parseDouble(String.format("%.0f", sTotalPrice))));
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("Item_Price", "" + pe);
hashMap.put("Item_Quantity", "" + number);
hashMap.put("Available_Stock", "" + availableStock);
//update db
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Users");
ref.child(firebaseAuth.getUid()).child("Cart").child(cartModel.getItem_PID()).updateChildren(hashMap)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//db updated
// Toast.makeText(context, "Cart updated", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//failed updating db
Toast.makeText(context, "Cart not updated", Toast.LENGTH_SHORT).show();
}
});
//To update stock value in cart
int stk_number = 0;
stk_number = Integer.parseInt(holder.stock.getText().toString().trim());
if (stk_number >0 ){
stk_number--;
holder.stock.setText(""+stk_number);
HashMap<String, Object> hashMap1 = new HashMap<>();
hashMap1.put("Stock_left", "" + stk_number);
//update db
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Users");
reference.child(firebaseAuth.getUid()).child("Cart").child(cartModel.getItem_PID()).updateChildren(hashMap1)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
//db updated
// Toast.makeText(context, "Cart updated", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
//failed updating db
Toast.makeText(context, "Cart not updated", Toast.LENGTH_SHORT).show();
}
});
}
else {
stk_number = 0;
}
}
});
}
每当我单击回收器视图项中的递增/递减按钮时,回收器视图会自动向上滚动。 如果我需要再次增加,我每次都需要再次向下滚动。 那么,如何停止这种自动向上滚动并使其保持在同一位置。
成功加载和填充Adapter
后,您必须删除ValueEventListener
。 否则,您会在更新值后收到更新事件。 这将创建一个滚动到顶部的新Adapter
。
如果您只想读取数据库一次,可以使用.get()
:
mDatabase.child("users").child(userId).get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (!task.isSuccessful()) {
Log.e("firebase", "Error getting data", task.getException());
}
else {
Log.d("firebase", String.valueOf(task.getResult().getValue()));
}
}
});
来源: https ://firebase.google.com/docs/database/android/read-and-write#read_data_once
在你的情况下:
reference.child(firebaseAuth.getUid()).child("Cart").get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.