如何解决带有复选框和自定义适配器的 ListView,片段无法正常工作
我想制作一个带有复选框的列表视图。但是复选框检查工作不正常,只是在我的列表中的第一个元素签入。你能帮我吗?这是我的代码
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;
}
} 我如何生成正确的位置,我的意思是要选中/取消选中的正确项目
如果我放了一个 toast 而不是 ****,我会生成列表的第一项
解决方法
在@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"));
}
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。