我使用tho代码在我的地图上添加标记。问题是如果我创建了多个标记,我可以在地图上看到我的所有标记,但如果我退出应用程序并重新打开,它只会记住最后一个标记。我想我必须创建一个数组列表和一个循环。不幸的是我无法找到如何做到这一点的例子,我想也是因为我使用Mapsforge 0.3.1而不是谷歌地图。
这是在onCreate
之外ListOverlay myListOverlay;
List<OverlayItem> myOverlayItems;
Marker myMarker = null;
SharedPreferences prefs = null;
这是onCreate
中的代码myListOverlay = new ListOverlay();
myOverlayItems = myListOverlay.getOverlayItems();
mapView.getOverlays().add(myListOverlay);
prefs = this.getSharedPreferences("MotionEvent",MODE_PRIVATE);
//Check whether your preferences contains any values then we get those values
if((prefs.contains("Lat")) && (prefs.contains("Lon"))){
String lat = prefs.getString("Lat","");
String lon = prefs.getString("Lon", "");
GeoPoint l =new GeoPoint(Double.parseDouble(lat),Double.parseDouble(lon));
myMarker = createMarker(l, R.drawable.ic_location);
myOverlayItems.add(myMarker);
byte viewMarker = this.mapView.getMapViewPosition().getZoomLevel();
this.mapView.getMapViewPosition().setZoomLevel(viewMarker);
this.mapView.getMapViewPosition().setCenter(l);
}
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e) {
if (e.getAction() == MotionEvent.ACTION_DOWN) {
byte viewMarker = mapView.getMapViewPosition().getZoomLevel();
float x = e.getX();
float y = e.getY();
GeoPoint gPt = mapView.getProjection().fromPixels((int)x, (int)y);
myMarker = createMarker(gPt, R.drawable.ic_location);
myOverlayItems.add(myMarker);
mapView.getMapViewPosition().setZoomLevel(viewMarker);
prefs.edit().putString("Lat",String.valueOf(gPt.latitude)).commit();
prefs.edit().putString("Lon",String.valueOf(gPt.longitude)).commit();
DialogMyMarkers();
}
}
});
mapView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v0, MotionEvent e) {
// Only fires if Mapview touched
return mGestureDetector.onTouchEvent(e);
}
});
DialogMyMarkers打开编辑文本,为标记指定名称。然后保存标记的名称并显示在myMarkersDialog
中 protected void myMarkersDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View) inflater.inflate(R.layout.my_markers_listview, null);
builder.setView(convertView);
builder.setTitle("List");
lv = (ListView) convertView.findViewById(R.id.listView1);
if (prefs.contains("Name"))
{
String name = prefs.getString("Name", "0");
String[] values = new String[] {name};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,values);
lv.setAdapter(adapter);
}
builder.setNegativeButton(getResources().getString(R.string.no_dialog), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
但是,当我在地图上有多个标记时,我怎么能这样做呢?
答案 0 :(得分:0)
我认为这个错误在线:
myListOverlay = new ListOverlay();
myOverlayItems = myListOverlay.getOverlayItems();
为什么需要重新创建叠加层?
建议:在GoogleMaps V2上书写更容易!
答案 1 :(得分:0)
是的,您的假设是正确的 我认为也是因为我使用Mapsforge 0.3.1而不是Google地图 您可以使用Google Map API并尝试存储标记使用sql-lite数据库的信息。我想你会得到所需的输出
完成此示例here