public class UnitListAdapter extends ArrayAdapter<Unit> {
private Context context;
private ArrayList<Unit> units;
private MeasurementType type;
private static HashMap<String, Double> unitValues;
public void setMeasurementType(MeasurementType measurementType) {
type = measurementType;
}
public void setUnitValues(HashMap<String, Double> newValues) {
unitValues.clear();
unitValues = newValues;
}
public void setUnits(ArrayList<Unit> newUnits) {
units = newUnits;
}
}
以上是ArrayAdapter
减去getView()
和getCount()
方法的实现。现在,在我的活动中,我有这种方法:
public void updateUnitAdapter(ArrayList<Unit> units, final MeasurementType measurementType) {
//change the type
unitAdapter.setMeasurementType(measurementType);
//set the hashmap unit values
unitValues = new HashMap<String, Double>() {{
put(measurementType.getType(), DEFAULT_VALUE);
}};
//clear the current units for the previous measurement type
unitAdapter.clear();
//add the new units for the new measurement type
for(Unit u : units) {
unitAdapter.add(u);
}
//update the list view
unitAdapter.notifyDataSetChanged();
}
但是当我在调试器中单步执行时,它会转到getView()
方法,当我检查这些变量时,它们仍然无法更改为我正在设置它们的新方法,它们会保留同样的......有什么我不理解的ArrayAdapter
?
答案 0 :(得分:0)
ArrayAdapter
有自己的内部集合,在您致电add()
或clear()
时会对其进行修改。在这种情况下,您正在更新它,但是(从您的评论中)看起来您还覆盖了getCount()
和getView()
以从其他地方获取这些值(可能是units
成员?)
如果是这种情况,您应该更新units
调用clear()
/ add()
的内容。
否则,请完全删除units
字段,然后使用getItem()
访问收集项。