Я создаю приложение, которое является динамически заполняющим/депопуляционным arraylist в зависимости от потока Futuretask, который взаимодействует с сервером.ArrayAdapter обновляющие данные
Проблема заключается в том, что, когда я добавить новый объект в мое arrayadapter и в любом случае я называю notifyDataSetChanged или setNotifyOnChange
(например, после добавления элемента, я также пытался сделать некоторую postadd функции, которая вызывает notifyDataSetChanged или даже пытался добавить setNotifyOnChange в конструктор адаптера, или перед добавлением (adapter.setNotifyOnChange (правда)))
в этом FutureTask он просто замерзает нить и вызывает сбой приложения. Без уведомления об изменении, когда я скольжу пальцем, чтобы вызвать getView(), он работает, но это нежелательное поведение.
Примечание: Я обращаюсь к адаптеру с помощью ссылки на статические переменные.
Примечание № 2: Я не думаю, что создание нового адаптера снова и снова является разумным выбором.
/редактировать:
Мой метод удалить выглядит следующим образом:
public void remove (int itemid) {
for (ContactItem i : items)
if (i.ID == itemid)
items.remove(i);
}
(и он висит в конце концов на последнем pharantesis)
Здравствуйте, ваш ответ помог мне поблагодарить вас, но я также испытываю очень странную ошибку. Я также добавил setNotifyOnChange (false); к конструктору адаптера, поэтому его не следует называть неявным, когда я пытаюсь добавить/удалить из списка, но иногда этот вызов возникает, когда я удаляю и все приложение зависает, когда я нажимаю экран, это то, что я получаю. – Smarty77
java.lang.IllegalStateException: содержимое адаптера изменилось, но ListView не получил уведомление. Убедитесь, что содержимое адаптера не изменено из фонового потока, но только из потока пользовательского интерфейса. Убедитесь, что ваш адаптер вызывает notifyDataSetChanged() при изменении его содержимого.[в ListView (2131427350, класс android.widget.ListView) с адаптером (класс censored.ui.adapters.ContactsAdapter)] – Smarty77
Документация для упомянутой функции: «Если установлено значение« ложно », вызывающий должен вручную вызвать notifyDataSetChanged(), чтобы иметь изменения, отраженные в прикрепленном виде. Значение по умолчанию - true, а вызов notifyDataSetChanged() сбрасывает флаг в true. " Кажется, вам нужно сбросить его после вызова notifyDataSetChanged(). – NameSpace