每次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 进行实时更新
如何使用 ASP.NET MVC 应用程序在 firebase 实时数据库中设置数据