Каков хороший подход для ListView, который регулярно обновляется из фонового потока и поддерживается в нескольких действиях? - PullRequest
2 голосов
/ 24 января 2011

Сначала некоторая справочная информация и параметры того, что я ищу.

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

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

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

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

Спасибо

1 Ответ

1 голос
/ 24 января 2011

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

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

...