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

问题描述 投票:0回答:1

在我的自定义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方法,这时两个列表都被清除了......谁能说明一下为什么?

android android-listview android-arrayadapter notifydatasetchanged
1个回答
0
投票

如果你想只清除一个特定的列表,只需使用

converted.clear();

children.clear();

两者都会被清除,因为converted是对儿童的引用。为了避免这种情况,你可以使用

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

并继续呼吁

clear();

但是,需要注意的是,当你在调用

clear(); 

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

© www.soinside.com 2019 - 2024. All rights reserved.