在我的自定义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);
}
我在构造函数中设置了子代列表,所以请不要担心它是空的或其他什么,在调试过程中,它有数据,即: converted
列表有数据,调用clear方法,这时两个列表都被清除了......谁能说明一下为什么?
如果你想只清除一个特定的列表,只需使用
converted.clear();
或
children.clear();
两者都会被清除,因为converted是对儿童的引用。为了避免这种情况,你可以使用
List<Adult> converted = new ArrayList<>();
converted.addAll(Converter.convert(children);
并继续呼吁
clear();
但是,需要注意的是,当你在调用
clear();
你实际上是在整个适配器上调用它,从而清除数据集。这就是为什么我说你应该指定你要清除哪个列表,但我也会使用上面的ArrayList<>()声明与.addAll()