【问题标题】:RecyclerView is reloading every time firebase realtime database data set每次firebase实时数据库数据集时,RecyclerView都会重新加载
【发布时间】: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);
    }
}

}

这是我设置值的代码

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-08-04
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2017-07-13
    相关资源
    最近更新 更多