Java 谷歌地图:将标记保存在数组中,然后列出它们
在用户在地图上创建标记后,我如何将其+所有属性(lat、long、title、snippet等)保存在结构/数组中,然后在单独的活动中列出它们?我应该创建一个关联每个标记的对象吗 以下是Java 谷歌地图:将标记保存在数组中,然后列出它们,java,android,google-maps,Java,Android,Google Maps,在用户在地图上创建标记后,我如何将其+所有属性(lat、long、title、snippet等)保存在结构/数组中,然后在单独的活动中列出它们?我应该创建一个关联每个标记的对象吗 以下是MapsActivity的代码: package com.geekybrackets.virtualtourguide; import android.content.Context; import android.content.Intent; import android.support.v4.app.Fr
MapsActivity
的代码:
package com.geekybrackets.virtualtourguide;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.WeakHashMap;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
public GoogleMap mMap;
double lat = 0;
double lon = 0;
static final int GET_DETAILS = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
public void onMapClick(LatLng latLng) {
lat = latLng.latitude;
lon = latLng.longitude;
startActivityForResult(new Intent(MapsActivity.this,newMarker.class), GET_DETAILS);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (requestCode == GET_DETAILS) {
if (resultCode == RESULT_OK) {
String marker_title=data.getStringExtra("title");
Marker m = mMap.addMarker(new MarkerOptions()
.position(new LatLng(lat, lon))
.title(marker_title));
mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lon)));
}
}
}
}
要使用已创建的标记,可以创建一个
列表
:
如果您需要将标记的值传递给另一个活动
,因为标记是UI的一部分,因此不认为它是持久的,但是标记选项
实现了可包裹
,您可以使用以下意图将其发送给另一个活动:
List<MarkerOptions> markers = new ArrayList<MarkerOptions>();
MarkerOptions markerOptions = new MarkerOptions()
.position(new LatLng(lat, lon))
.title(marker_title);
Marker m = mMap.addMarker(markerOptions);
markers.add(markerOptions);
MarkerOptions[] markersArray = markers.toArray(new MarkerOptions[markers.size()]);
Intent intent = new Intent();
intent.putExtra("markers", markersArray);
嗯,谢谢你的详细回复,但是,在通过意向发送信息后,我不希望在发送后启动活动,而是希望通过单独的按钮触发活动。在使用意图时这可能吗?只需在列表上保存标记,创建意图并在必要时启动活动即可needed@antonio如何在其他活动中检索markersArray?我在这里真的很挣扎
List<MarkerOptions> markers = new ArrayList<MarkerOptions>();
MarkerOptions markerOptions = new MarkerOptions()
.position(new LatLng(lat, lon))
.title(marker_title);
Marker m = mMap.addMarker(markerOptions);
markers.add(markerOptions);
MarkerOptions[] markersArray = markers.toArray(new MarkerOptions[markers.size()]);
Intent intent = new Intent();
intent.putExtra("markers", markersArray);