在Android中取消已经打开的Toast

我目前正在开发Android应用程序,并且一直在关注如何使用和改进Google地图应用程序的本教程 。

我已经设法在屏幕上显示地图,通过触摸我可以得到一个位置的地址(通过反向地理编码),并显示一个Toast 。 但是,这是我的问题 – 当你点击地图上的连续数次时,你会一个接一个Toast.LENGTH_LONG ,每个人都会花费他的时间(在我的情况下, Toast.LENGTH_LONG )消失。 我想让应用程序自动closures旧的烤面包,并显示一个新的烤面包,点击新的地址。

在其他资源,我发现我应该使用toast.cancel()方法为此目的,但我遇到麻烦使用它 – 我已经overrided onTouchEvent – 我怎么能检测到有一个新的地图,而toast显示? 或者,也许你会build议我更好地隐藏已经开放的toast

我已经尝试使我的Toast地址成为全球地址,但是这也不起作用。

这是我的代码为应用程序:

 @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; } 

Solutions Collecting From Web of "在Android中取消已经打开的Toast"

您不会将Toast address为全局,但是您每次单击时都会创build一个新的本地Toast对象:

 Toast address; address = Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG); address.show(); 

这将覆盖您正在创build的全局对象。 我build议把address作为你的类中的一个private static对象,以确保地址永远是同一个对象,不pipe你点击了多less次,这样你总是取消你上次显示的Toast (因为只有一个),并删除本地声明:

 private static Toast address; 

 if (address != null) address.cancel(); address = Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG); address.show(); 

你需要通过调用make()来创buildToast,然后在显示新的Toast之前,你应该取消旧的Toast.GoodLuck!