Совместное использование элементов, созданных в itemizedOverlay

Я использую itemizedOverlay в своем MapView, который генерирует путевые точки. У меня есть возможность изменять, добавлять, удалять эти путевые точки по желанию. Этот MapView разделяет экран как фрагмент с фрагментом listView. В настоящее время цель фрагмента — отображать путевые точки с карты и разрешать их удаление, перемещение и т. д. с помощью listFragment. Все это работает на данный момент.

У меня проблема в том, что оба фрагмента содержат собственную копию списка путевых точек. т.е. если я удаляю путевую точку с помощью представления карты, класс itemizedOverlay должен вызвать функцию ListFragment, чтобы удалить путевую точку из собственного списка. Это становится уродливым и скоро будет иметь свои собственные проблемы. Лучше иметь один список либо в listView, itemizedOverlay, либо в отдельном файле класса.

В других приложениях (на основе C++ или Java) я обычно создавал еще один класс как синглтон, и он содержит информацию, которая будет использоваться совместно между картой и списком. Это по-прежнему лучший способ решить проблему при работе с Android или есть другой лучший встроенный вариант?




Ответы (1)


Вы можете использовать один экземпляр вашего списка, если у вас есть ссылка на класс, который расширяет класс Application вашего проекта. Подробнее об этом подходе см. здесь.

person Angelo    schedule 20.07.2012
comment
Вы отвечаете работает, однако мне подсказали, что лучше всего сделать объект Parcelable. Это довольно просто и, в конце концов, требует, чтобы я передал объект во фрагмент с помощью пакетов. Я знаю, что оба метода просты, за исключением того, что у метода Parcelable есть свой нюанс, требующий, чтобы кодировщик упорядочивал предметы, помещаемые в посылку, в определенном порядке. Есть ли лучший вариант? Кажется, андроид предпочитает Parcelable. - person orion; 17.09.2012
comment
Другой способ, который, я думаю, будет работать, - это сохранить ссылку на список путевых точек в Activty, который содержит ваши два Fragments, и получить доступ к вашему списку путевых точек с помощью методов get и set. Вы можете получить связанные Activity из Fragment, используя getActivity метод. - person Angelo; 18.09.2012
comment
Я пробовал это, а также работал с методом приложения. На самом деле я могу использовать все три метода, однако я просто не уверен, какой метод является лучшим/самым чистым. - person orion; 18.09.2012
comment
Я не пробовал метод Parceable, но я пробовал два других предложенных, поэтому в отношении них я бы предложил использовать метод, в котором ваши данные хранятся в вашем Activity, поскольку таким образом жизненный цикл ваших данных будет длиться максимально как ваш Activity продолжительность жизни, и это может быть более эффективным с точки зрения памяти, чем другой метод. Преимущество хранения ваших данных в контексте Application заключается в том, что к ним можно получить доступ из любого места в вашем приложении, если у вас есть ссылка Context, а также их срок службы соответствует сроку службы вашего приложения. Я не думаю, что в вашем вопросе есть определенный ответ. - person Angelo; 18.09.2012
comment
Это так кажется. Думаю, я просто оставлю свои варианты открытыми на случай, если мне нужно будет переключиться с одного на другой. Спасибо. - person orion; 19.09.2012