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實例。
添加回答
舉報