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