Ste*_*hev 8 android google-maps toast
我目前正在开发Android应用程序,我一直在关注如何使用和改进Google地图应用程序的本教程.
我已经设法在屏幕上显示地图,在触摸时我获得了一个位置的地址(通过反向地理编码)并显示了一个Toast.但这是我的问题 - 当你在地图上连续点击多次时,你会得到所有的toasts一个接一个,他们每个人都会花时间(在我的情况下) - Toast.LENGTH_LONG消失.我想让应用程序自动关闭旧的toast并显示一个新的toast,点击新的地址.
在其他资源中,我发现我应该将此toast.cancel()方法用于此目的,但我在使用它时遇到了麻烦 - 我已经超越了onTouchEvent- 如何在显示时检测到地图上有新的触摸toast?或许你会建议我隐藏已经开放的更好的方法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;
}
Run Code Online (Sandbox Code Playgroud)
Riv*_*Kid 22
您没有显示Toast address全局的位置,但每次单击时都要创建一个新的本地Toast对象:
Toast address;
address = Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG);
address.show();
Run Code Online (Sandbox Code Playgroud)
这将覆盖您正在创建的全局对象.我建议您在班级中address作为一个private static对象,确保无论您点击多少次,地址始终都是同一个对象,这样您总是取消Toast上次显示的对象(因为只有一个),并删除当地宣言:
private static Toast address;
Run Code Online (Sandbox Code Playgroud)
...
if (address != null)
address.cancel();
address = Toast.makeText(getBaseContext(), add, Toast.LENGTH_LONG);
address.show();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11496 次 |
| 最近记录: |