【发布时间】:2019-01-16 02:08:29
【问题描述】:
我的应用程序中有一个带有 2 种标记的地图片段:我使用事件 OnMapLongClick() 添加的标记和我从 .csv 文件添加的标记。我想通过单击它们时开始一个新活动来保存有关标记中每个坐标的一些详细信息。我遇到的问题是,从 .csv 文件添加的标记总是显示最后一个标记的位置。所以我的问题是,当我点击它时,如何获得来自 .csv 的对应标记的位置?这可以通过使用 Hashmap 更改 ArrayList 来实现吗?
MapsActivity(相关代码):
public void onMapLongClick(LatLng latLng) {
MarkerOptions markerOptions = new MarkerOptions()
.position(latLng)
.title("Introdus!");
markerOptions.draggable(true);
mMap.addMarker(markerOptions);
mMap.setOnMarkerClickListener(this);
latlngNew = latLng;
LatLng latlngNew;
}
@Override
public boolean onMarkerClick(Marker marker) {
if (counter==0) {
openDialog();
}
else
{
marker.setIcon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
counter--;
}
return false;
}
public void openDialog() {
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog);
dialog.setTitle(R.string.default_info_title);
dialog.show();
Button bt_da = (Button) dialog.findViewById(R.id.dialog_ok);
Button bt_nu = (Button) dialog.findViewById(R.id.dialog_cancel);
bt_da.setOnClickListener(this);
bt_nu.setOnClickListener(this);
bt_nu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
}
);
bt_da.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
counter=1;
Intent intent = new Intent(MapsActivity.this, MainActivity.class);
intent.putExtra("markerLat", latlngNew.latitude);
intent.putExtra("markerLong", latlngNew.longitude);
startActivity(intent);
}
});
}
public void Upload(View view) throws IOException {
File file = new File(getExternalFilesDir(null), "date.csv");
if (file.exists()) {
InputStream instream = new FileInputStream(file);
InputStreamReader inputreader = new InputStreamReader(instream);
BufferedReader reader = new BufferedReader(inputreader);
List<LatLng> latLngList = new ArrayList<LatLng>();
String line = " ";
while ((line = reader.readLine()) != null) // Read until end of file
{
double lat = Double.parseDouble(line.split(",")[0]);
double lon = Double.parseDouble(line.split(",")[1]);
latLngList.add(new LatLng(lat, lon));
mMap.setOnMarkerClickListener(this);
}
for (LatLng pos : latLngList) {
latlngNew=pos;
Marker m=mMap.addMarker(new MarkerOptions()
.position(pos)
.title("Din CSV!")
.draggable(true)
);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(pos, DEFAULT_ZOOM));
}
}
else
{
Toast.makeText(MapsActivity.this,"Nu exista fisierul!", Toast.LENGTH_SHORT).show();
}
}
public void Sterge(View view){
mMap.clear();
}
}
【问题讨论】:
-
看起来您可能只需要在
onMarkerClick()覆盖内设置latlngNew。 -
但它的价值是什么?至于我添加的标记,它得到了这个
intent.putExtra("markerLat", latlngNew.latitude); intent.putExtra("markerLong", latlngNew.longitude);,对于来自.csv 的标记,我像这样latlngNew=pos;。我想我需要从 csv 操作每个条目的 id,但不知道如何
标签: java android google-maps google-maps-markers