Этот код передает тот же экземпляр ArrayList
в LanguageItemArrayAdapter
new LanguageItemArrayAdapter(getContext(), simpleLanguageItems, simpleLanguageItems)
Чтобы понять, почему add(…)
и clear()
в ArrayAdapter
также изменяют тот же объект, который вам нужно посмотретьпри их реализации из source .
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
экземпляр.