Ответ 1
Предполагая, что функция getNewData() возвращает ArrayList<CustomItem>
, вы можете изменить строку:
items=getNewData();
to
items.addAll(getNewData());
и посмотрите, работает ли это?
У меня есть эта проблема, у меня есть
private ArrayList<CustomItem> items;
private ArrayAdapter<CustomItem> arrayAdapter;
i показать данные, присутствующие в элементах, эти данные, которые я вижу в списке, теперь я хочу обновить данные и увидеть эти новые данные.
if (!items.isEmpty()) {
items.clear(); // i clear all data
arrayAdapter.notifyDataSetChanged(); // first change
items = getNewData();// insert new data and work well
arrayAdapter.notifyDataSetChanged(); // second change
}
в первом изменении я вижу, что данные очищаются, но во втором изменении я не вижу новых данных в списке, я проверяю и элемент не пуст.
Я не знаю, где ошибка, можете ли вы мне помочь? лучшие регаты Антонио
Предполагая, что функция getNewData() возвращает ArrayList<CustomItem>
, вы можете изменить строку:
items=getNewData();
to
items.addAll(getNewData());
и посмотрите, работает ли это?
Вот как я обновляю адаптер с новыми данными:
if (arrayAdapter == null) {
arrayAdapter = new CustomArrayAdapter(getActivity(), data);
listview.setAdapter(userAutoCompleteAdapter);
} else {
arrayAdapter.clear();
arrayAdapter.addAll(newData);
arrayAdapter.notifyDataSetChanged();
}
ArrayList
, созданный вами в классе Activity
, является ссылочной переменной, которая содержит ту же ссылку на ArrayList
в вашем классе Adapter
, проходя через конструктор (когда вы инициализируете объект Adapter
).
Однако, выполнив items = getNewData()
, вы назначаете новую ссылку на items
в своем классе Activity
, ссылка в вашем классе Adapter
остается прежней, поэтому вы не видите изменений на экране.
Это так:
personA: объект ArrayList в классе деятельности class
personB: объект ArrayList в классе адаптера class
PersonA и personB держат карту США (отдельно), а на экране отображается карта personB. Затем кто-то заменяет карту personA другой картой страны. Угадайте, что, на экране все еще отображается карта США.
Вместо того, чтобы изменять ссылку на items
, вы должны использовать add()
, remove()
, clear()
или addAll()
, чтобы изменить данные items
, а затем вызвать notifyDataSetChanged()
.