когда / почему мы должны вместо этого добавить объект непосредственно в ArrayAdapter
изменить источник данных (ArrayList), а затем вызвать
listAdapter.notifyDataSetChanged ()
Существует 2 способа добавить элемент в ListView.
datasource.add(item);
listview.notifyDataSetChanged();
или
adapter.add(item);
На самом деле второй реализован так же, как первый с некоторой дополнительной проверкой под капотом, вот определение метода add
из ArrayAdapter
.
/**
* Adds the specified object at the end of the array.
*
* @param object The object to add at the end of the array.
* @throws UnsupportedOperationException if the underlying data collection is immutable
*/
public void add(@Nullable T object) {
synchronized (mLock) {
if (mOriginalValues != null) {
mOriginalValues.add(object);
} else {
mObjects.add(object);
}
mObjectsFromResources = false;
}
if (mNotifyOnChange) notifyDataSetChanged();
}
mObjects
относится к переменной datasource
, поэтому они одинаковы.
Какой из них лучше?
Они немного отличаются друг от друга, возникает ситуация, если вы вызываете datasource.add(item)
где-нибудь в программе и забыли вызвать listview.notifyDataSetChanged
, тогда ваш список не будет обновлен. Чтобы избежать этого, вы должны использовать adapter.add(item);
, поскольку он автоматически обновляет представление списка.