每次firebase实时数据库数据集时,RecyclerView都会重新加载

Posted

技术标签:

【中文标题】每次firebase实时数据库数据集时,RecyclerView都会重新加载【英文标题】:RecyclerView is reloading every time firebase realtime database data set 【发布时间】:2021-10-14 05:02:45 【问题描述】:

在 recyclerview 中单击项目后,我正在尝试在 firebase 实时数据库中为子项设置值

在 Firebase 实时数据库中为子级设置值后,Recyclerview 每次都会重新加载

我为 recyclerview 使用自定义适配器

我该如何解决这个问题...

代码

public class date_adapter extends RecyclerView.Adapter<date_adapter.MyViewHolder> 

Context context;
private ArrayList<date_model> list;
int times;
private choosing_model model;
private ArrayList<date_model> doneItemsAre;
private ArrayList<date_model> dateModels;

date_adapter(Context context, ArrayList<date_model> list, choosing_model model, ArrayList<date_model> date_models) 
    this.context = context;
    this.list = list;
    this.model = model;
    this.dateModels = date_models;



@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
    View v = LayoutInflater.from(context).inflate(R.layout.date_view_item, parent, false);
    return new MyViewHolder(v);


@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) 
    holder.month.setText(list.get(position).getMonth());
    holder.date.setText(String.valueOf(list.get(position).getDate()));

    FirebaseAuth auth = FirebaseAuth.getInstance();
    FirebaseUser user = auth.getCurrentUser();

    doneItemsAre = new ArrayList<>();

    if (model.isDone())
        if ((dateModels.get(position).isChecked())) 
            DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("user").child(user.getUid()).child("challenges").child("challenge").child(model.getChoosingTitle()).child("oneWeek").child(String.valueOf(position)).child("checked");
            holder.calendarCard.setCardBackgroundColor(Color.parseColor("#03ADFF"));
            holder.month.setTextColor(Color.parseColor("#ffffff"));
            holder.date.setTextColor(Color.parseColor("#ffffff"));
            reference.setValue(true);

        
    



@Override
public int getItemCount() 
    return list.size();


public static class MyViewHolder extends RecyclerView.ViewHolder 

    TextView month, date;
    CardView calendarCard;

    public MyViewHolder(@NonNull View itemView) 
        super(itemView);

        month = itemView.findViewById(R.id.calendar_month);
        date = itemView.findViewById(R.id.calendar_date);
        calendarCard = itemView.findViewById(R.id.calendar_card);
    

这是我设置值的代码

【问题讨论】:

firebase.google.com/docs/database/android/… 请将您的问题与您的代码示例一起发布,您将获得更快的响应 【参考方案1】:

当调用onBindViewHolder (reference.setValue(true)) 时,您似乎正在更新数据库中的值,因此每次呈现该项目时。您应该只进行一次更新,或者仅在用户对数据执行操作时进行。

【讨论】:

以上是关于每次firebase实时数据库数据集时,RecyclerView都会重新加载的主要内容,如果未能解决你的问题,请参考以下文章

每次在 firebase 实时数据库中添加新孩子时使用 firebase 函数发送推送通知不起作用

使用 Firebase 实时数据库 Flutter 进行实时更新

关闭 Firebase 上的实时更改 (Android)

如何使用 ASP.NET MVC 应用程序在 firebase 实时数据库中设置数据

将 Firebase 实时数据库与 SwiftUI 列表一起使用 - 清除列表

从Firebase实时数据库读取Android数据并在RecyclerView上显示