Je commence actuellement à développer des applications Android et j'ai suivi un this tutorial sur la façon d'utiliser et d'améliorer l'application Google Maps.Annulation d'un toast déjà ouvert dans Android
J'ai réussi à apparaître sur l'écran de la carte, au toucher j'obtiens l'adresse d'un emplacement (via Reverse Geocoding) avec l'affichage d'un Toast
. Mais voici mon problème - lorsque vous cliquez sur un nombre de fois consécutives sur la carte, vous obtiendrez tous les toasts
l'un après l'autre et chacun d'entre eux prendra son temps (dans mon cas - Toast.LENGTH_LONG
) pour disparaître. Je veux que l'application ferme automatiquement l'ancien toast et affiche un nouveau toast avec la nouvelle adresse cliquée.
Dans d'autres ressources que je trouvais que je devrais utiliser la méthode toast.cancel()
à cette fin, mais j'éprouve du mal à l'utiliser - je l'ai déjà overrided la onTouchEvent
- comment puis-je détecter il y a une nouvelle touche sur la carte tandis que le toast
est montrant ? Ou peut-être que vous me suggérez un meilleur moyen de cacher le toast
déjà ouvert?
J'ai essayé de rendre mon adresse Toast
globale, mais elle ne fonctionnait pas aussi.
Voici mon code pour l'application:
@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;
}
Comment toast.cancel() ne fonctionne pas? Est-ce qu'on l'appelle? –
Aussi, je recommanderais d'utiliser 'ACTION_UP == event.getAction()' au lieu de 'event.getAction() == 1'. C'est juste du bon style. –
duplication possible de [Comment annuler Toast créé dans une méthode différente sur Android?] (Http://stackoverflow.com/questions/5503682/how-to-cancel-toast-created-in-a-different-method-on -android) – Wroclai