我已经实现了一个自定义地图,允许用户使用长按钮将标记添加到共享首选项,最后我让它工作。在我的地图上,我有一个按钮,可以调用方法" Clear Marker"当按下按钮时,我需要退出地图并重新打开它以进行更改。我希望地图能够立即更新,还有一种方法可以删除添加到共享首选项的最后一项吗? IE清除前一个标记,而不是每个标记都添加。用于存储标记的代码是
@Override
public void onMapLongClick(LatLng latLng) {
addressEditText = (EditText) findViewById(R.id.editTextAddMarker);
title12 = addressEditText.getText().toString();
if (title12.length() > 2) {
MarkerOptions markerOpt1 = new MarkerOptions()
.title(title12)
.anchor(0.5f, 0.5f);
markerOpt1.position(latLng);
mMap.addMarker(markerOpt1);
Toast.makeText(this, "Marker Added", Toast.LENGTH_LONG).show();
locationCount++;
/** Opening the editor object to write data to sharedPreferences */
SharedPreferences.Editor editor = sharedPreferences.edit();
// Storing the latitude for the i-th location
editor.putString("lat" + Integer.toString((locationCount - 1)), Double.toString(latLng.latitude));
// Storing the longitude for the i-th location
editor.putString("lng" + Integer.toString((locationCount - 1)), Double.toString(latLng.longitude));
//editor.putString("title", addressEditText.getText().toString());
editor.putString("title" + (locationCount-1), addressEditText.getText().toString());
// Storing the count of locations or marker count
editor.putInt("locationCount", locationCount);
/** Saving the values stored in the shared preferences */
editor.commit();
} else if (title12.length() < 1) {
Toast.makeText(this, "Enter title at the top left.", Toast.LENGTH_LONG).show();
}
}
然后我从共享首选项中检索数据并将其绘制到我的onMapReady()
中的地图上 // Opening the sharedPreferences object
sharedPreferences = getSharedPreferences("location", 0);
// Getting number of locations already stored
locationCount = sharedPreferences.getInt("locationCount", 0);
// If locations are already saved
if (locationCount != 0) {
String lat = "";
String lng = "";
String title13 = "";
// Iterating through all the locations stored
for (int i = 0; i < locationCount; i++) {
// Getting the latitude of the i-th location
lat = sharedPreferences.getString("lat" + i, "0");
// Getting the longitude of the i-th location
lng = sharedPreferences.getString("lng" + i, "0");
SharedPreferences myPrefs = PreferenceManager.getDefaultSharedPreferences(this);
title13 = sharedPreferences.getString("title" + i, "0");
//Toast.makeText(this, lat + "," + lng, Toast.LENGTH_LONG).show();
double lat3 = Double.valueOf(lat).doubleValue();
double lng3 = Double.valueOf(lng).doubleValue();
position1 = new LatLng(lat3, lng3);
drawMarker(position1,title13);
}
}
最后用于删除标记的代码(问题在这里)按下按钮后标记不会从地图中删除,只有当用户按下按钮离开并返回到地图时。它还清除共享首选项,有谁知道我怎么可以删除最后添加的项目?
private void clearMarker() {
// Opening the editor object to delete data from sharedPreferences
SharedPreferences.Editor editor = sharedPreferences.edit();
// Clearing the editor
editor.clear();
// Committing the changes
editor.commit();
}
}
上面用&#34; onClick&#34;通过按钮。有谁知道如何做到这一点?所有帮助将不胜感激。
答案 0 :(得分:0)
addMarker
的方法签名是:
public final Marker addMarker (MarkerOptions options)
它返回在地图上创建的Marker
对象。
在您的情况下,请替换
mMap.addMarker(markerOpt1);
与
Marker marker = mMap.addMarker(markerOpt1);
然后,您可以将此Marker
对象存储在SharedPreferences
中,而不是存储纬度和经度。请查看this答案以获取相关说明。
这使您可以从Marker.remove()
方法中的Marker
调用SharedPreferences
对象上的clearMarker()
,从地图中删除该特定标记。