1 回答
TA贡献1847条经验 获得超7个赞
此代码将相同的实例传递ArrayList给LanguageItemArrayAdapter
new LanguageItemArrayAdapter(getContext(), simpleLanguageItems, simpleLanguageItems)
要理解为什么add(…)和clear()in也修改同一个对象,您需要从源代码ArrayAdapter中查看它们的实现。
public void clear() {
synchronized (mLock) {
if (mOriginalValues != null) {
mOriginalValues.clear();
} else {
mObjects.clear();
}
…
}
…
}
clear()将修改mObjects和mOriginalValues(您会注意到其他函数也ArrayAdapter做同样的事情)。您需要阅读里面的代码ArrayFilter以了解它们是如何修改的。
private class ArrayFilter extends Filter {
/*
mObjects will contain only items fulfilling the filter conditions.
Original items are copied into mOriginalValues
*/
}
查看构造函数(和构造函数链),您会发现您的类构造函数有
super(context, 0, filteredList);
最终会调用
private ArrayAdapter(@NonNull Context context,
@LayoutRes int resource,
@IdRes int textViewResourceId,
@NonNull List<T> objects,
boolean objsFromResources) {
…
mObjects = objects;
…
}
这允许ArrayAdapter修改您的simpleLanguageItems实例。
添加回答
举报