【发布时间】:2017-11-07 18:36:31
【问题描述】:
目前我正在使用谷歌地图和标记在 Android 工作室应用程序中工作。 这个应用程序的想法是,用户只能被允许每隔一小时放置一个标记,因此如果用户在一小时后向地图添加一个标记,则该标记应该会消失。 问题是,即使用户关闭应用程序,我也希望该标记在那一小时内留在地图中。我遇到了这个问题,因为如果我关闭它,标记会永远留在地图中。我该如何解决这个问题?当我关闭应用程序时,postDelayed 会停止吗?我是否以正确的方式使用 runnable 和 handler?
这是我的代码:
public void drawMarker(View view) {
if (marker == null) {
Location loc = returnLocation();
Double lat = loc.getLatitude();
Double lon = loc.getLongitude();
//para guardar un marker en sharedPreferences
sharedPreferences.edit().putString("Lat",String.valueOf(lat)).apply();
sharedPreferences.edit().putString("Lng",String.valueOf(lon)).apply();
marker = addMarker(loc);
dialogPlayas.dismiss();
removeMarker.setVisibility(View.VISIBLE);
markerHandler = new Handler();
markerHandler.postDelayed(timeRemoveMarker, 10000); //van a durar ua hora osea 3600000 milisegundos
}
}
private Runnable timeRemoveMarker = new Runnable() {
@Override
public void run() {
marker.remove();
removeMarker.setVisibility(View.GONE);
sharedPreferences.edit().remove("Lat").apply();
sharedPreferences.edit().remove("Lng").apply();
marker = null;
}
};
public void removeMarkerButton(View view) {
if (marker != null) {
marker.remove();
sharedPreferences.edit().remove("Lat").apply();
sharedPreferences.edit().remove("Lng").apply();
removeMarker.setVisibility(View.GONE);
//markerHandler.removeCallbacks(timeRemoveMarker);
}
marker = null;
}
这是我在重新启动应用程序时用来使标记出现的代码:
@Override
public void onMapReady(final GoogleMap googleMap) {
mMap = googleMap;
goToLocation();
mMap.getUiSettings().setMapToolbarEnabled(false);
sharedPreferences = this.getSharedPreferences("LatLng",MODE_PRIVATE);
//Check whether your preferences contains any values then we get those values
if((sharedPreferences.contains("Lat")) && (sharedPreferences.contains("Lng")))
{
Location loc = new Location("");
String lat = sharedPreferences.getString("Lat","");
String lng = sharedPreferences.getString("Lng","");
LatLng position =new LatLng(Double.parseDouble(lat),Double.parseDouble(lng));
Double latitude = Double.parseDouble(lat);
Double longitude = Double.parseDouble(lng);
loc.setLatitude(latitude);
loc.setLongitude(longitude);
addMarker(loc);
removeMarker.setVisibility(View.VISIBLE);
//mMap.setInfoWindowAdapter(new windowInfo(MapsActivity.this));
}
}
有解决这个问题的想法吗? 我还认为,如果用户删除了标记,则处理程序应该停止运行,所以我正在做这样的事情
public void removeMarkerButton(View view) {
if (marker != null) {
marker.remove();
sharedPreferences.edit().remove("Lat").apply();
sharedPreferences.edit().remove("Lng").apply();
removeMarker.setVisibility(View.GONE);
markerHandler.removeCallbacks(timeRemoveMarker);
}
marker = null;
}
但每当我添加标记并重新启动应用程序时,触摸删除按钮会使我的应用程序停止工作。那是因为 removeCallbacks 但我不知道如何解决这个问题。
【问题讨论】:
标签: android google-maps maps