#android #listview
#Android #listview
Вопрос:
Когда я отображаю / обновляю представление списка после получения службой новых данных, порядок элементов списка меняется каждый раз.
ArrayAdapter имеет элемент ArrayList, и все элементы находятся в правильном порядке, пока не будут показаны на экране. У меня также есть два ItemViewTypes, один для заголовка элементов и один для элементов, конечно. Это отображается с помощью «шаблона» ViewHolder.
Наверное, я упускаю что-то глупое.
Что может вызвать такое поведение?
Комментарии:
1. лол, да, моя реализация могла быть проблемой, но, как я уже сказал … порядок элементов в порядке до тех пор, пока он не попадет в список. Позже будет создан образец приложения, чтобы продемонстрировать, что происходит. Не удается отобразить текущий код..
2. наиболее важными являются getItemViewType и getView. заголовки и элементы находятся в одном и том же ArrayList? … действительно сложно ответить без кода, и я не знаю, может быть, экран печати такого поведения
3. Некоторый код здесь: gist.github.com/1308835
4. вам не нужен тип элементов поддержки, если вы используете тот же макет, удалите getItemViewType и измените getView на pastebin.com/VGkr2f7U … в вашем коде вы не установили значения, если convertView != null 🙂
5. мой плохой .. я пропустил, что вы используете разные макеты … так что попробуйте это pastebin.com/zi29LLUh
Ответ №1:
Я предполагаю, что ArrayAdapter
он содержит собственную неглубокую копию списка, который вы предоставляете при создании экземпляра ArrayAdapter
. Если это предположение верно, следствием является то, что изменения элементов списка отображаются в ListView, в то время как изменения порядка элементов списка не будут отражены.
Если элементы вашего списка сопоставимы, так что требуемый порядок может быть восстановлен, вы можете вызвать ArrayAdapter.sort(Comparator comp)
метод и метод ArrayAdapter.notifyDataSetChanged() впоследствии. В моем случае даже положение прокрутки было сохранено идеально.
Однако вы также можете попробовать использовать методы add
и remove
ArrayAdapter
для обновления самого адаптера.