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