ListView clear()清除ArrayAdapter中的每个List

时间:2014-12-12 00:22:54

标签: android android-listview android-arrayadapter clear notifydatasetchanged

在我的自定义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方法被调用,两个列表在那一点上被清除了...有人可以解释为什么?

1 个答案:

答案 0 :(得分:0)

如果您只想清除特定列表,请使用

converted.clear();

children.clear();

由于转换为对儿童的引用,两者都被清除。为避免这种情况,您可以使用

List<Adult> converted = new ArrayList<>();
converted.addAll(Converter.convert(children);

并继续致电

clear();

但是,应该注意的是,当你打电话时

clear(); 

您实际上是在整个适配器上调用它,它会清除数据集。这就是为什么我说你应该指定你要清除哪个列表,但我也会使用上面的ArrayList&lt;&gt;()声明.addAll()