2012-06-20 3 views
2

У меня есть приложение для Android, которое регулярно записывает местоположения и хранит в db в фоновом режиме. db поставляется с поставщиком контента. используйте приемник сигналов тревоги и службу, чтобы установить повторяющуюся задачу записи.Можно ли использовать класс Loaders в MapActivity?

Теперь я хотел бы положить контакты на карте, используя данные (lat & long) в db. В настоящее время я использую Loader для загрузки курсора и чтения данных из db, а затем помещаю их в представление списка в fragment activity (используя пакет поддержки v13 в платформе 2.3.3). Однако я не мог найти способ конвертировать это в рисование на карте в активную карту. Если моя активность продолжается MapActivity, я не могу использовать метод getSupporLoaderManager().iniLoader(...) для инициализации загрузчика, поскольку он говорит об ошибке.

Я хочу сохранить загрузчик, потому что кажется, что он быстрее обрабатывается, если размер данных большой. Мой вопрос заключается в том, как читать данные с использованием Loader класса в MapActivity? Если это невозможно, то какой способ лучше читать данные и рисовать на карте?

Любое предложение или ответ оценены.

+0

Да, на уровне API 11 и выше. – CommonsWare

+0

@CommonsWare вы хотите использовать 'Fragment'? – Yulong

+1

Пакет поддержки Android требует, чтобы вы наследовали его от «FragmentActivity», и вам нужно, чтобы получить доступ к инфраструктуре «Loader» через пакет поддержки Android. Надстройка Google Maps требует, чтобы вы наследовали от «MapActivity». Вы не можете сделать это одновременно. – CommonsWare

ответ

0

это должно быть возможно! Я предполагаю, что вы можете загрузить свой список данных внутри своей MapActivity, поэтому позвоните по телефону Marker для получения дополнительной информации. Просто растяжимый, чтобы представлять их и расширить ItemizedOverlay

public class MarkerOverlay extends ItemizedOverlay<OverlayItem>{ 

    Collection<Marker> mMarkers; 

    public MarkerOverlay(Drawable drawable, Collection<Marker> markers){ 
    super(drawable); 
    mMarkers = marker; 
    } 

    @Override 
    public OverlayItem createItem(int index){ 
    Marker m = mMarkers.get(index); 
    return new OverlayItem(new GeoPoint(m.getLatitude(), m.getLongitude()), 
          m.getTitle(), m.getSnippet(); 
    } 

    @Override 
    public int size(){ 
    return mMarkers.size(); 
    } 

} 

внутри MapActivity вы можете сделать это:

MarkerOverlay mMarkerOverlay; 

public void onCreate(Bundle icicle){ 
    super(icicle); 
    ArrayList<Marker> list = Cursor.getList(); //fetch your data from Cursor 
    mMarkerOverlay = new MarkerOverlay(getResources().getDrawable(
           R.drawable.some_marker_drawable), 
           list); 
    getOverlays().add(mMarkerOverlay); 

} 

вы могли бы еще иметь уникальную вытяжку для каждых маркеров. просто установите его в createItem, прежде чем вернуть его

+0

спасибо за такое подробное объяснение! Однако моя проблема заключается в том, как использовать класс «Loader» для извлечения данных из db в «MapActivity». – Yulong

+0

argh, извините, я пропустил это. Я оставляю свой ответ, поскольку это может помочь другому. –

+0

уверен, что никаких проблем – Yulong

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