如何修复RecycleView选中项添加到Firebase时误传全部项的问题?
解决RecyclerView选中项仅添加到Firebase的问题
我看了你的代码,问题很明显——你往Firebase写入数据时用了整个数据源列表mfoodinfo,而不是你选中的那单个项!
你看这段关键代码:
databaseReference.child(selectedKey).setValue(mfoodinfo);
这里的mfoodinfo是你RecyclerView的完整数据源,所以执行这行代码时,会把所有列表项都写入Firebase,而不是你点击选中的那一项。
修复起来很简单,只需要把mfoodinfo替换成你已经获取到的selectedItem即可,修改后的完整代码如下:
@Override public void onAddClick(int position) { FoodInfo selectedItem = mfoodinfo.get(position); final String selectedKey = selectedItem.getFoodname(); StorageReference imageRef = firebaseStorage.getReferenceFromUrl(selectedItem.getImageUrl()); imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() { @Override public void onSuccess(Void aVoid) { final DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Order"); // 替换为选中的单个项,而非整个列表 databaseReference.child(selectedKey).setValue(selectedItem); Toast.makeText(Menu.this, "Order Successful!!", Toast.LENGTH_SHORT).show(); } }); }
这样修改后,点击添加按钮时就只会把你选中的那单个FoodInfo对象写入Firebase的Order节点下对应的selectedKey路径中,不会再把整个列表都添加进去了。
内容的提问来源于stack exchange,提问作者Choy
相关产品推荐
相关产品推荐

