Actualmente estoy comenzando a desarrollar aplicaciones para Android y he estado siguiendo un this tutorial sobre cómo usar y mejorar la aplicación Google maps.Cancelar una tostada ya abierta en Android
He logrado mostrar en la pantalla el mapa, al tacto obtengo la dirección de una ubicación (a través de Geocodificación inversa) con la muestra de Toast
. Pero aquí está mi problema: cuando haces clic en varias veces consecutivas sobre el mapa, obtendrás todos los toasts
uno después del otro y cada uno de ellos tomará su tiempo (en mi caso - Toast.LENGTH_LONG
) para desaparecer. Quiero que la aplicación cierre automáticamente el tostado más viejo y muestre un nuevo brindis con la nueva dirección en la que se hace clic.
En otros recursos que he encontrado que debería utilizar el método toast.cancel()
para este propósito, pero yo experimento problema para usarlo - Ya he overrided la onTouchEvent
- ¿Cómo puedo detectar que hay un nuevo toque sobre el mapa mientras que el toast
está mostrando ? O tal vez me sugiera una mejor forma de ocultar el ya abierto toast
?
He tratado de hacer que mi dirección Toast
sea global, pero tampoco funcionaba.
Aquí está mi código de la aplicación:
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
//---when user lifts his finger---
if (event.getAction() == 1) {
GeoPoint p2 = mapView.getProjection().fromPixels((int) event.getX(), (int) event.getY());
Geocoder geoCoder = new Geocoder(getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(p2.getLatitudeE6()/1E6,
p2.getLongitudeE6()/1E6, 1);
String add = " ";
if (addresses.size() > 0)
for (int i=0; i<addresses.get(0).getMaxAddressLineIndex();i++)
add += addresses.get(0).getAddressLine(i) + "\n";
Toast address;
address = Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG);
address.show();
}
catch (IOException e) {
e.printStackTrace();
}
return true;
}
return false;
}
¿Cómo no funciona toast.cancel()? ¿Se lo está llamando? –
Además, recomendaría usar 'ACTION_UP == event.getAction()' en lugar de 'event.getAction() == 1'. Es solo un buen estilo. –
posible duplicado de [Cómo cancelar Toast creado en un método diferente en android?] (Http://stackoverflow.com/questions/5503682/how-to-cancel-toast-created-in-a-different-method-on -android) – Wroclai