L'annulation d'une déjà ouvert le pain grillé Android
Je suis en train de commencer à développer des applications Android et j'ai été suivi d'un ce tutoriel sur la façon d'utiliser et d'améliorer l'application Google maps.
J'ai réussi à afficher sur l'écran de la carte, touchez-je obtenir l'adresse d'un emplacement (via le Géocodage Inversé) avec la projection d'une Toast
. Mais voici mon problème: lorsque vous cliquez sur un certain nombre de fois consécutives sur la carte, vous obtiendrez tous les toasts
les uns après les autres, et chacun d'entre eux va prendre son temps (dans mon cas - Toast.LENGTH_LONG
) disparaît. Je veux faire de l'application de fermer automatiquement les anciens pain grillé et de montrer un nouveau toast à la nouvelle adresse cliqué.
Dans d'autres ressources, j'ai trouvé que je devrais utiliser le toast.cancel()
méthode à cette fin, mais j'ai l'expérience de la difficulté d'utilisation, j'ai déjà surdéfini la onTouchEvent
- comment puis-je détecter il y a un nouveau contact sur la carte pendant que la toast
montre?
Ou peut-être vous me suggérer une meilleure façon de cacher la déjà ouvert toast
?
J'ai essayé de faire de mon Toast
adresse un mondial, mais il 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;
}
Aussi, je vous conseille d'utiliser
ACTION_UP == event.getAction()
au lieu de event.getAction() == 1
. C'est juste un bon style.double possible de Comment annuler un Toast créé dans une méthode différente sur android?
Merci, @Pompe de velo - c'est ce que je cherchais! Tack
OriginalL'auteur Stefan Doychev | 2011-07-19
Vous devez vous connecter pour publier un commentaire.
Vous ne vous montrez pas où vous avez
Toast address
mondial, mais vous êtes la création d'un nouveau local Toast objet à chaque fois que vous cliquez sur:Qui va se substituer à l'objet global de la création. Je vous recommande d'avoir
address
comme unprivate static
objet dans votre classe pour s'assurer que l'adresse sera toujours le même objet, n'importe comment beaucoup de fois vous cliquez sur de sorte que vous êtes toujours l'annulation de laToast
que vous dernier a montré (car il n'y a qu'un), et retirer les locaux de la déclaration:...
private static Toast address;
déclaration mondiale. Si maintenant, j'utilise l'adresse.la méthode cancel() il suffit d'annuler mon toast et rien n'apparaît - comment appeler l'annulation d'un toast seulement quand il y a une nouvelle touche sur l'écran?Appelez simplement
address.cancel()
dans votre onTouchEvent avant de vous montrer le nouveau toast - ce qui va annuler une toast si il y en a un (en montrant ou en attente d'être démontré) j'ai mis à jour ma suggestion d'inclure cette.J'ai essayé avec le
address = Toast.makeText(getBaseContext(),add, Toast.LENGTH_LONG); address.cancel(); address.show();
mais j'obtiens le même résultat - le toast changements qu'après c'est la durée de vie se termine.J'ai trouvé la réponse ici - stackoverflow.com/questions/5503682/...
private Toast mToastText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Create the object once. mToastText = Toast.makeText(this, "", Toast.LENGTH_SHORT); } private void displayText(final String message) { mToastText.cancel(); mToastText.setText(message); mToastText.show(); }
Peut-être que c'était votre idée de départ - merci!Votre première tentative a été l'annulation de la en attendant toast avant de les afficher, le deuxième celui que vous avez trouvé est exactement le genre de chose que j'allais pour - heureux que vous avez résolu votre problème.
OriginalL'auteur RivieraKid
Vous avez besoin pour obtenir de l'instance lors de la création de Toast de faire appel().Après cela, avant de vous montrer les nouveaux toast, vous devriez annuler vieux pain grillé.GoodLuck!
Toast.makeText
de travail de la même façon quemake()
? Ici, j'ai une question sur le début de ma méthode OnTouchEvent je peux avoir une case déjà ouvert toast - si y est un ouvert - l'annuler et de procéder à l'avant avec l'ouverture d'une nouvelle. Mais est-il une méthode pour vérifier l'existence d'un toast?RivieraKid parler de la solution qui est la même avec ma façon.
Je n'ai pas encore eu le vôtre auparavant, maintenant je sais comment faire, je suis tout à fait comprendre il - merci.
OriginalL'auteur duonghv