Java/Android Studio中ArrayList添加自定义类元素报类型不匹配错误
问题根因
报错来自添加新待办事项的代码逻辑错误:
你的taskList是只能存储ToDos类型对象的ArrayList,你在构造ToDos对象时,错误地在构造函数的第一个参数位置嵌套调用了taskList.add(editText.getText().toString())。ArrayList.add()方法的返回值是boolean类型(用来标识元素是否添加成功),既不是ToDos构造函数需要的String类型待办内容,还会提前往只能存ToDos的列表里塞String类型值,自然会报类型不匹配错误。
修复方案
去掉构造ToDos对象时嵌套的多余taskList.add()调用,先从输入框取到待办文本、拿到开关状态,构造完合法的ToDos对象后,再调用taskList.add()把对象加入列表即可。
- 原错误代码:
taskList.add(new ToDos(taskList.add(editText.getText().toString()),switch1.isChecked()));
- 修复后代码:
// 取出输入框的待办内容 String inputContent = editText.getText().toString(); // 拿到紧急状态 boolean urgentStatus = switch1.isChecked(); // 构造ToDos对象后加入列表 taskList.add(new ToDos(inputContent, urgentStatus));
可选优化点
修复完类型报错后,还可以补两个细节避免后续出现功能异常:
- 增加输入非空校验:点击添加按钮时先判断输入内容是否为空,为空就不执行添加逻辑,避免产生无内容的无效待办
- 修复列表项背景复用错乱:你的适配器
getView方法里只给紧急项设置了红色背景,没有给非紧急项还原默认背景,列表滑动时会因为View复用导致非紧急项也显示红色,补充else分支即可:
textview.setText(getItem(position).text); if(getItem(position).IsUrgent){ textview.setBackgroundColor(Color.RED); } else { // 非紧急项还原默认透明背景 textview.setBackgroundColor(Color.TRANSPARENT); }
内容的提问来源于stack exchange,提问作者HugeCodingNoobie
相关产品推荐
相关产品推荐

