在Android中取消已经开放的吐司

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)

  • 我在这里找到了答案 - http://stackoverflow.com/questions/5503682/how-to-cancel-toast-created-in-a-different-method-on-android`私人Toast mToastText; @Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); 的setContentView(R.layout.main); //创建一次对象 mToastText = Toast.makeText(this,"",Toast.LENGTH_SHORT); private void displayText(final String message){mToastText.cancel(); mToastText.setText(消息); mToastText.show(); }"也许这是你最初的想法 - 谢谢! (4认同)