ArrayAdapter值不变

时间:2014-07-12 18:48:26

标签: android android-arrayadapter

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

1 个答案:

答案 0 :(得分:0)

ArrayAdapter自己的内部集合,在您致电add()clear()时会对其进行修改。在这种情况下,您正在更新它,但是(从您的评论中)看起来您还覆盖了getCount()getView()以从其他地方获取这些值(可能是units成员?)

如果是这种情况,您应该更新units调用clear() / add()的内容。

否则,请完全删除units字段,然后使用getItem()访问收集项。