Android 带有复选框和自定义适配器的ListView,片段工作不正常

Android 带有复选框和自定义适配器的ListView,片段工作不正常,android,android-fragments,android-listview,android-arrayadapter,android-checkbox,Android,Android Fragments,Android Listview,Android Arrayadapter,Android Checkbox,我想创建一个带有复选框的列表视图。但是checkbox检查没有正常工作,checkin right只是我列表中的第一个元素吗。你能帮我吗?这是我的密码 public class ToDoAdapter extends ArrayAdapter<ToDo> { private FirebaseAuth mAuth; FirebaseUser user; FirebaseFirestore db; private Context context; private int resour

我想创建一个带有复选框的列表视图。但是checkbox检查没有正常工作,checkin right只是我列表中的第一个元素吗。你能帮我吗?这是我的密码

public class ToDoAdapter extends ArrayAdapter<ToDo> {

private FirebaseAuth mAuth;
FirebaseUser user;
FirebaseFirestore db;

private Context context;
private int resource;
private List<ToDo> list;
private LayoutInflater inflater;
CheckBox checkBox;
ToDo toDo;

public ToDoAdapter(@NonNull Context context, int resource, @NonNull List<ToDo> objects,
                   LayoutInflater inflater) {
    super(context, resource, objects);
    this.context=context;
    this.resource=resource;
    this.list=objects;
    this.inflater=inflater;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    View view = inflater.inflate(resource,parent, false);
    mAuth = FirebaseAuth.getInstance();
    user = mAuth.getCurrentUser();
    db = FirebaseFirestore.getInstance();
    view.setClickable(true);
    view.setFocusable(true);
    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bundle bundle = new Bundle();
            bundle.putSerializable("todoID",position);
            bundle.putSerializable("item", ToDoFragment.arrayAdapterToDo.getItem(position)
                    .getDetalii());
            bundle.putSerializable("deadline", ToDoFragment.arrayAdapterToDo.getItem(position)
                    .getDeadline().toString());
            ToDoFragment.getInstance().newFragment(bundle);
        }
    });
    toDo = list.get(position);
    if(toDo!=null){
        addData(view, toDo.getDeadline());
        addDetalii(view, toDo.getDetalii());
        check(view, toDo.isEsteEfectuat());

    }

    checkBox = view.findViewById(R.id.checkbox);

    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(checkBox.isChecked()) {
*****
                checkBox.setChecked(true);
                toDo.setEsteEfectuat(true);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#008000"));
            } else {
                checkBox.setChecked(false);
                toDo.setEsteEfectuat(false);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#FF0000"));
            }
        }
    });

    return view;
}
公共类ToLoadAdapter扩展了ArrayAdapter{
私人消防队;
FirebaseUser用户;
FirebaseFirestore数据库;
私人语境;
私有int资源;
私人名单;
私人充气机;
复选框;
ToDo ToDo;
public-ToDoAdapter(@NonNull上下文上下文,int-resource,@NonNull列表对象,
(充气机){
超级(上下文、资源、对象);
this.context=context;
这个。资源=资源;
this.list=对象;
这个。充气机=充气机;
}
@非空
@凌驾
公共视图getView(int位置,@Nullable视图convertView,@NonNull视图组父级){
视图=充气机。充气(资源,父项,false);
mAuth=FirebaseAuth.getInstance();
user=mAuth.getCurrentUser();
db=FirebaseFirestore.getInstance();
视图。可点击设置(真);
view.setFocusable(true);
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Bundle=新Bundle();
bundle.putSerializable(“todoID”,位置);
bundle.putSerializable(“item”,ToDoFragment.arrayAdapterToDo.getItem(位置)
.getDetalii());
bundle.putSerializable(“截止日期”,ToDoFragment.arrayAdapterToDo.getItem(位置)
.getDeadline().toString());
ToDoFragment.getInstance().newFragment(bundle);
}
});
toDo=list.get(位置);
如果(toDo!=null){
addData(视图,toDo.getDaildate());
addDetalii(视图,toDo.getDetalii());
检查(view,toDo.isEsteEfectuat());
}
checkBox=view.findviewbyd(R.id.checkBox);
checkBox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(checkBox.isChecked()){
*****
checkBox.setChecked(true);
toDo.SETESTEEFUCTIAT(真);
updateCheckBox();
view.setBackgroundColor(Color.parseColor(#008000”);
}否则{
checkBox.setChecked(false);
toDo.SETESTEEFUCTIAT(假);
updateCheckBox();
view.setBackgroundColor(Color.parseColor(#FF0000”);
}
}
});
返回视图;
}
} 如何生成正确的位置,我指的是要选中/取消选中的正确项目

如果我祝酒而不是****的话,我会成为名单的第一项


在@blackapps的帮助下,尝试以下操作:

CheckBox checkBox = view.findViewById(R.id.checkbox);
    checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            toDo = ToDoFragment.arrayAdapterToDo.getItem(position);
            if(checkBox.isChecked()) {
                checkBox.setChecked(true);
                toDo = ToDoFragment.arrayAdapterToDo.getItem(position);
                toDo.setEsteEfectuat(true);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#008000"));
            } else  {
                checkBox.setChecked(false);
                toDo = ToDoFragment.arrayAdapterToDo.getItem(position);
                toDo.setEsteEfectuat(false);
                updateCheckBox();
                view.setBackgroundColor(Color.parseColor("#FF0000"));
            }
        }
    });

复选框从那里删除并放入getView()。在复选框中放入onCheckChangedListener。它不起作用:(什么不起作用?发布新代码)。