在复选框状态更改时从回收器视图适配器更新 sqlite 数据库

Posted

技术标签:

【中文标题】在复选框状态更改时从回收器视图适配器更新 sqlite 数据库【英文标题】:Update sqlite database from recycler view adapter on checkbox state change 【发布时间】:2021-03-12 10:59:15 【问题描述】:

我想在回收站视图中的复选框状态更改时更新我的​​ SQLite 数据库。所有数据都列在回收站视图中。当我单击复选框时,我想调用数据库函数来更新数据库

public class OverTimeAdapter extends RecyclerView.Adapter<OverTimeAdapter.MyViewHolder> 
    private Context context;
    private ArrayList otId,otDate,otShift,paymentStatus;
    private DatabaseHelper attendanceDB;

    OverTimeAdapter(Context context,ArrayList otId,ArrayList otDate,ArrayList otShift ,ArrayList paymentStatus)
        this.context =context;
        this.otId = otId;
        this.otDate = otDate;
        this.otShift=otShift;
        this.paymentStatus = paymentStatus;
    

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 
        
    

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) 
      
        if (paymentStatus.get(position)=="1")
            holder.otListPayment.setChecked(true);
        else 
            holder.otListPayment.setChecked(false);
        
        OtDbId =String.valueOf(otId.get(position));
        holder.otListPayment.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                boolean checked =holder.otListPayment.isChecked();
                if (checked)
                    payStatus=1;
                else
                    payStatus=0;
                

                // call db update function from here
                // attendanceDB = new DatabaseHelper(this); This is error
                //attendanceDB.updateOvertime()   /*error*/
             
                
            
        );
    

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

    public class MyViewHolder extends RecyclerView.ViewHolder
        public CheckBox otListPayment;

        public MyViewHolder(@NonNull View itemView) 
            super(itemView);
            otListPayment =(CheckBox) itemView.findViewById(R.id.chk_ot_list_payment);

        
    

我们如何初始化 DBHelper 对象并调用函数?从哪里(在哪个函数内)我可以做到?

【问题讨论】:

【参考方案1】:

将回调从适配器传递到片段/活动。在片段/活动中进行数据库更改。 检查这个:https://***.com/a/42234382/3797879

【讨论】:

以上是关于在复选框状态更改时从回收器视图适配器更新 sqlite 数据库的主要内容,如果未能解决你的问题,请参考以下文章

在回收器视图适配器android Kotlin之外更新ProgressBar

滚动时,在recyclerView中取消选中复选框

Android:需要在自定义适配器列表视图中保存复选框状态

如何从其适配器中更改回收视图的项目位置?

如何找出分页数据适配器中的第一项已更改

如何从适配器刷新主要活动中的视图?