【问题标题】:Deleting CardView Data from UI and Firebase Realtime Database?从 UI 和 Firebase 实时数据库中删除 CardView 数据?
【发布时间】:2021-11-02 01:04:33
【问题描述】:

我有一个 RecyclerViewCardViews,它们来自我的 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 膳食层次结构:

【问题讨论】:

标签: java android firebase firebase-realtime-database android-recyclerview


【解决方案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( ) }
猜你喜欢
  • 2021-06-04
  • 1970-01-01
  • 2020-01-17
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
相关资源
最近更新 更多