在我的自定义ArrayAdapter中,我正在使用视图持有者模式,在getView()
方法中,我有一个TextChangedListener()
我正在这样做:
List<Child> children;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
List<Adult> converted = Converter.convert(children);
clear();
addAll(converted);
notifyDataSetChanged();
}
@Override
public void clear() {
children.clear();
}
@Override
public void addAll(Collection<? extends Currency> collection) {
children.addAll(collection);
}
我在构造函数中设置子列表,所以请不要担心它是null或者其他什么,在调试期间,它有数据,converted
列表有数据,clear方法被调用,两个列表在那一点上被清除了...有人可以解释为什么?
答案 0 :(得分:0)
如果您只想清除特定列表,请使用
converted.clear();
或
children.clear();
由于转换为对儿童的引用,两者都被清除。为避免这种情况,您可以使用
List<Adult> converted = new ArrayList<>();
converted.addAll(Converter.convert(children);
并继续致电
clear();
但是,应该注意的是,当你打电话时
clear();
您实际上是在整个适配器上调用它,它会清除数据集。这就是为什么我说你应该指定你要清除哪个列表,但我也会使用上面的ArrayList&lt;&gt;()声明.addAll()