因此,我正在创建一个习惯跟踪器,每次您选中 viewHolder 上的复选框时都会添加一个值,我遇到的问题是,当我在列表中有 6 个或更多习惯时,复选框无法正常工作(他们开始随机检查订购)再给我上面的错误。我在我的回收器适配器上使用它: public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position){ holder.nombre.setText(mHabitosList.get(position).getNombre()); FirebaseDatabase mDatabase = FirebaseDatabase.getInstance(); mDatabaseReference = mDatabase.getReference("Habitos"); FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if(user != null) { userId = user.getUid(); habitosReference = mDatabaseReference.child(userId); habitosReference.child(mHabitosList.get(holder.getAdapterPosition()).getHabitosId()).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Habitos habitos = dataSnapshot.getValue(Habitos.class); if(habitos != null) { updateHabitosTotal[position] = habitos.getTotal(); checkBox1 = habitos.isCheckbox1(); checkBox2 = habitos.isCheckbox2(); checkBox3 = habitos.isCheckbox3(); checkBox4 = habitos.isCheckbox4(); checkBox5 = habitos.isCheckbox5(); checkListeners(holder, position); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } 我为代码转储道歉......任何形式的帮助将不胜感激!(:
2 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
它已经在文档中提到getAdapterPosition()
可以返回 -1 或者RecyclerView.NO_POSITION
如果
项目已从适配器中移除。
RecyclerView.Adapter.notifyDataSetChanged()
在最后一次布局传递之后被调用。在
ViewHolder
已经被回收。
所以为了避免它,你应该总是检查getAdapterPosition() != RecyclerView.NO_POSITION
项目是否被点击
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
由于您没有提供太多代码或错误,因此我只是进行有根据的猜测。
您的问题可能与位置变量有关,您需要打印您的位置。mHabitList 是 0 索引,它从 0 开始。我的猜测是位置不是,尝试从位置减去 1。
添加回答
举报
0/150
提交
取消