2

私は定期的に場所を記録し、バックグラウンドでデータベースに保存するためのAndroidアプリを持っています。dbにはコンテンツプロバイダーが付属しています。アラーム受信機とサービスを使用して、繰り返し記録タスクを設定します。

ここで、データベースのデータ(lat&long)を使用して地図にピンを配置したいと思います。私は現在、ローダーを使用してカーソルをロードし、dbからデータを読み取り、それらをfragment activity(2.3.3プラットフォームのサポートパッケージv13を使用して)のリストビューに配置しています。ただし、これをマップアクティビティのマップビューでの描画に変換する方法を見つけることができませんでした。アクティビティが拡張された場合、エラーと表示されているため、MapActivityメソッドを使用getSupporLoaderManager().iniLoader(...)してローダーを初期化できません。

データサイズが大きいと処理が速くなるように見えるので、ローダーを保持したいと思います。私の質問は、Loaderクラスを使用してデータを読み取る方法はMapActivity?不可能な場合、データを読み取って地図上に描画するためのより良い方法は何ですか?

任意の提案や回答をいただければ幸いです。

4

1 に答える 1

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 に設定するだけです

于 2012-06-20T22:24:31.227 に答える