java - 从适配器类中的 Firebase 中删除
问题描述
您好,我正在尝试从 Firebase 实时数据库中删除一个项目。我可以让它从回收站视图中删除,但它不会从 Firebase 中删除。
目前,我正在尝试通过单击 recyclerview 项目中的删除按钮来删除该项目,并将代码放在适配器 java 类中。
为了让它从firebase中删除,我有什么遗漏吗?
我的适配器代码:
public class DailyMealAdapter extends RecyclerView.Adapter<DailyMealAdapter.MyViewHolder> {
private Context context;
private List<SelectedMeal> selectedMealList;
private DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Meals");
public DailyMealAdapter(Context c, List<SelectedMeal> sm) {
context = c;
selectedMealList = sm;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.dailymeal_item, parent, false);
DailyMealAdapter.MyViewHolder viewHolder = new DailyMealAdapter.MyViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
final int itemPos = position;
final SelectedMeal selectedMeal = selectedMealList.get(position);
holder.mealTitle.setText(selectedMeal.getMealName());
holder.mealCalories.setText(selectedMeal.getCalorieAmount());
holder.mealDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedMealList.remove(position);
notifyItemRemoved(position);
notifyItemChanged(position, selectedMealList.size());
final DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Meals");
final ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
dataSnapshot.getValue(SelectedMeal.class);
ref.child(selectedMealList.get(position).getMealId()).removeValue();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
//ref.child(String.valueOf(selectedMealList.get(Integer.parseInt(selectedMeal.getMealId())))).removeValue();
//deleteMeal(selectedMeal.getMealId(), itemPos);
}
});
}
@Override
public int getItemCount() {
return selectedMealList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView mealTitle, mealCalories;
public Button mealDelete;
public CardView cardView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
mealTitle = (TextView) itemView.findViewById(R.id.dailyMealTitle);
mealCalories = (TextView) itemView.findViewById(R.id.dailyMealCalories);
cardView = (CardView) itemView.findViewById(R.id.dailyCardView);
mealDelete = itemView.findViewById(R.id.deleteButton);
}
}
解决方案
你可以试试这个:
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView mealTitle, mealCalories;
public Button mealDelete;
public CardView cardView;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
mealTitle = (TextView) itemView.findViewById(R.id.dailyMealTitle);
mealCalories = (TextView) itemView.findViewById(R.id.dailyMealCalories);
cardView = (CardView) itemView.findViewById(R.id.dailyCardView);
mealDelete = itemView.findViewById(R.id.deleteButton);
mealDelete.setOnClickListener(this);
}
@Override
public void onClick(View view) {
ref.child(selectedMealList.get(getAdapterPosition()).getMealId()).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
selectedMealList.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());
}
});
}
}
onBindViewHolder 像一样干净
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
final int itemPos = position;
final SelectedMeal selectedMeal = selectedMealList.get(position);
holder.mealTitle.setText(selectedMeal.getMealName());
holder.mealCalories.setText(selectedMeal.getCalorieAmount());
}
推荐阅读
- python - AttributeError: 'str' object has no attribute 'P' 当尝试从所有 .odt 文件中递归提取文本时,使用 odfpy 库
- flutter - 在 Flutter 中绘制圆形菜单
- java - 带有蓝色事物的 VS Code Java 输出“HelloWorld”
- android - 检查下载中的自定义文件夹中是否存在文件 - 不推荐使用 getExternalStoragePublicDirectory
- c# - 在 Parallel.ForEach 循环 C# 中错误捕获的特定异常
- python - 使用 isin 过滤数据框
- r - 删除逗号并不断收到“视图错误:'names' 属性 [17] 必须与向量 [1] 的长度相同”
- typescript - 为什么我在使用 TypeScript 的 try-catch 中使用 var 变量得到“变量在被分配之前使用”?
- c - 如何拒绝此代码中的非数字输入?
- apache-kafka - Kafka Stream - 按 client_id 过滤