从 UI 和 Firebase 实时数据库中删除 CardView 数据?
Posted
技术标签:
【中文标题】从 UI 和 Firebase 实时数据库中删除 CardView 数据?【英文标题】:Deleting CardView Data from UI and Firebase Realtime Database? 【发布时间】:2021-11-02 01:04:33 【问题描述】:我有一个 RecyclerView
和 CardViews
,它们来自我的 Firebase 实时数据库,用于不同的活动,例如日常用餐。我向CardView
添加了一个删除按钮,我想实现从 UI 和数据库功能中删除。我知道如何分别执行这两项操作,但我不确定在从 UI 中删除 CardView
后如何更新数据库。
目前,它正在从 UI 中删除,而不是从数据库中删除,所以当我回到 activity
时,卡片会重新出现。每顿饭都有自己的随机 ID,不确定这是否会有所不同,但认为这很重要。
适配器删除功能:
foodHolder.deleteMeal.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
meals.remove(position);
notifyDataSetChanged();
);
进餐活动(设置适配器的位置):
mealRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>()
@Override
public void onComplete(@NonNull Task<DataSnapshot> task)
if (task.isSuccessful())
int total = 0;
for (DataSnapshot mealSnapshot : task.getResult().getChildren())
String grams = mealSnapshot.child("grams").getValue(String.class);
if (grams == null)
textViewFoodCounter.setText("0");
else
total += Integer.parseInt(grams);
textViewFoodCounter.setText(String.valueOf(total));
if (meals != null)
noMealsImg.setVisibility(View.GONE);
noMealsText.setVisibility(View.GONE);
else
noMealsImg.setVisibility(View.VISIBLE);
noMealsText.setVisibility(View.VISIBLE);
progressBar.setMax(1000); // make dynamic
ObjectAnimator.ofInt(progressBar, "progress", Integer.parseInt(grams))
.setDuration(300)
.start();
Meal data = mealSnapshot.getValue(Meal.class);
meals.add(data);
foodAdapter = new FoodAdapter(meals);
foodRecyclerView.setAdapter(foodAdapter);
else
Log.d("TAG", task.getException().getMessage());
);
卡片视图:
Firebase 膳食层次结构:
【问题讨论】:
如果您考虑在某个时间点尝试使用Cloud Firestore,这里有一些有用的文章可能会有所帮助。 How to delete a record from Firestore on a RecylerView left/right swipe 和 How to delete multiple records from Firestore using RecyclerView multi-selection. 谢谢@AlexMamo,是的,我最终遵循了 YouTube 上的教程,将我的 RecyclerView 转换为 FirebaseRecyclerView 和实施者滑动删除以及单击按钮 :) 非常复杂,但最终到达了那里! 很高兴听到这个消息。如果您找到了解决方案,您可能会考虑回答您自己的问题。所以未来的开发者可以从中受益。 我会的,好主意!今天某个时候会这样做:) 【参考方案1】:你可以做这样的事情。如果 firebase 数据库中有任何更新,您可以使用 addValueEventListener 和 onDataChange 加载新数据。
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance().reference;
DatabaseReference dmoRef = firebaseDatabase.getReference().child(serialId);
dmoRef.addValueEventListener(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
if (dataSnapshot.exists())
//get your updated data
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
Toast.makeText(getApplicationContext(), "Error fetching data", Toast.LENGTH_LONG).show();
);
【讨论】:
感谢您的回复,我的问题是它没有从数据库中删除,只有 UI ..我不知道如何通过适配器从数据库中删除.. 您没有从 firebase 数据库中删除。 onclick 您的视图持有者删除按钮获取唯一的 ID 或名称。然后你可以这样做。 ` val mRealtimeDatabaseRoot = FirebaseDatabase.getInstance().reference mRealtimeDatabaseRoot.child(uniqueID).removeValue() ` 我不知道如何从活动中删除它。我无法在我的适配器类中获取我的数据库引用来使用删除按钮。如果这有意义吗? @Anwarchowdhury 从你想发送的地方添加这个,在视图持有者 -- (view.context as MyActivity).deleteMeal(uniqueId) 在activity中接收并删除数据,在activity中添加这个——fun deleteMeal(uniqueId: String) val mRealtimeDatabaseRoot = FirebaseDatabase.getInstance().reference mRealtimeDatabaseRoot.child(uniqueID).removeValue( )以上是关于从 UI 和 Firebase 实时数据库中删除 CardView 数据?的主要内容,如果未能解决你的问题,请参考以下文章
当从实时数据库中删除对象时,Firebase 函数(用 NodeJS 编写)从 Cloud Storage 中删除文件
Flutter - 从特定值中删除数据,Firebase 实时数据库 [重复]