2011-01-24 1 views
2

Сначала немного информации о предыстории и параметрах того, что я ищу.Что такое хороший подход для ListView, который регулярно обновляется из фонового потока и поддерживается в нескольких действиях?

  • Приложение имеет несколько видов деятельности, которым необходим доступ к одному списку. Я использую класс Application, чтобы поддерживать этот список во всех действиях.
  • Список - это список настраиваемого объекта.
  • Существует одно действие, которое имеет ListView для отображения элементов в этом списке.
  • Существуют другие действия, которые должны иметь доступ к этому списку, но не отображают ListView.
  • Список может быть отсортирован или отфильтрован.
  • Список может быть обновлен (добавить, удалить, обновить содержимое) из фонового потока в любое время, и эти изменения должны быть немедленно отображены при просмотре списка.

До сих пор мой подход заключался в том, чтобы список управлялся с помощью методов в приложении, включая управление любыми обновлениями в списке. Если пользователь в данный момент находится в Activity с ListView в нем, он прослушивает обновления в списке. Когда он слышит обновление, он копирует список из приложения и отправляет его в пользовательский ArrayAdapter ListViews. ArrayAdapter извлекает этот список и заменяет базовый список, вызывает текущий сортировку и фильтр на нем, а затем заменяет список, который фактически отображается в списке, и вызывает notifyDataSetChanged(). Это все, чтобы избежать каких-либо проблем, которые может возникнуть у адаптера, если список изменяется из-за потока пользовательского интерфейса или без вызова notifyDataSetChanged().

Все это прекрасно работает, проблема заключается в том, что при таком подходе имеется несколько копий одного и того же списка, что снижает удобство использования этого списка в других местах и ​​создает ненужное использование памяти. Он также может создавать много копий, если в течение определенного периода времени будет много обновлений.

Итак, я ищу, чтобы увидеть, есть ли у кого-либо какие-либо подходы, которые позволят ListView напрямую ссылаться на источник основного списка, но все же избежать проблем с обновлением из потока пользовательского интерфейса?

Thanks

ответ

1

Я не знаю, что мой подход лучше. Я создаю адаптер, который содержит LinkedList элементов. Я сохраняю статическую ссылку на этот адаптер и когда необходимы обновления, другие действия и т. Д. обновить список и вызвать адаптер.notifyDataSetChanged()

Я думаю, что это использует только одну копию данных.

+0

Является ли адаптером вещь, которая содержит исходный список или является адаптером, созданным и используемым только тогда, когда это необходимо в ListView? – cottonBallPaws

+1

Адаптер хранит данные элементов, которые существуют в списке. –

+0

В каком контексте вы используете? Если я пытаюсь использовать ListAdapter с контекстом приложения, он терпит неудачу. – cottonBallPaws

 Смежные вопросы

  • Нет связанных вопросов^_^